عند بداية تعلم البرمجة تبدأ بإستخدام ما تتعلمه كما هو دون أن تدري ما هو معناه الحقيقي، و لكلٍ في هذا العُذر، و لكن بعد أن يقوى العود و تتسع المعارف لا بد أن نرجع إلى معرفة أصل الأشياء. ما هي؟ لماذا نستخدمها؟ هل هو إستخدام صحيح أم خاطئ؟ و هنا في هذا الميزان الكلمة المحجوزة في لغة الجافا public.
هل تنسى يوماً هذه العبارة التي تعلمناها جميعاً
public static void main(String args[])
لم نحفل كثيراً بمعنى هذه العبارة في بداياتنا مثلما حفلنا و فرحتنا برؤيتنا لنتائج تنفيذ البرنامج الأولى في حياتنا، ثم بعد ذلك بدأنا في إكتساب العادات البرمجية كلاً وفقاً لبيئته التي يتعلم منها. و الأفضل منهم هو من يتعلم في البيئة البرمجية الأكاديمية التي تميل إلى تكوين المبرمج المتكامل، كما هم من المحظوظين أيضاً من تعلم في بيئة تقنية معيارية، و لكنهم ليسوا الأغلبية.
ما هو الخطأ في إستخدام public
رأيت كثيراً من الشفرات (الأكواد) الخاصة بالمبرمجين -ولا أبرئُ نفسي– تحتوي على أخطاء معيارية و مفاهيمية، و لكن ليست تنفيذية. هذه الأخطاء لا توقف عمل البرنامج أو تؤثر في جودة المخرجات و دقتها، و لكن إن جلست و تفكرت قليلاً فستجد أن هذه الأخطاء تلغي الفائدة التي وجدت من أجلها البرمجة كائنية المنحى (Object Oriented Programming).
الخطأ الأكثر تداولاً و حدوثاً هو إستخدام الكلمة public عند تعريف أي متغير خارج الدوال و داخل الصنف (class)، كما يحدث هذا الخطأ أيضاً بصورة لا إرادية عند تعريف أي دالة من الدوال، فتُبدأ بالكلمة public فوراً. لاحظ الشفرات التالية هل تحس فيها شيئاً من الغرابة؟
public class CallStatic { public static int percentage = 10; public static void main(String args[]) { System.out.println("result = " + (50 * percentage / 100)); }//end main }
public class CallStatic { public static int percentage = 10; public static void main(String args[]) { System.out.println("result = " + calc_percent(50)); }//end main public static int calc_percent(int num){ return num*percentage/100; }//end calc_percent }
في الشفرة الأولى تم إستخدام العبارة public في متغير لا يتعدى إستخدامه الصنف المُنشأ به، فلماذا يتم تحويله إلى متغير عالمي يراه الجميع؟ لن يتأثر عمل البرنامج؟ نعم لن يتأثر، و لكن بهذه الطريقة نخالف مبدءاً مهما من مبادئ البرمجة كائنية المنحى و هي التضمين (Encapsulation). إخفاء التفاصيل التي لا يحتاجها مُنشئ الكائن أو أي مستخدم للصنف هو مبدأ التضمين، قائد السيارة لا يحتاج إلى أن يعرف كيف تعمل الماكينة، و بعضهم لو علم كيف تعمل الماكينة لترك ركوب السيارة إلى الأبد، إنه التضمين يا صديقي، كلٌ يعرف قدر الحاجة (Encapsulation).
ما هو الإستخدام الصحيح لـ public
إذاً كيف و متى نستخدم public، تستخدم public عند الحوجة للوصول إلى المتغير على مستوى أعلى من الحزمة (package) الموجود فيها.
لماذا حددنا أن تكون الجوجة للوصول من مستوى أعلى من الحزمة؟ لأنه الحوجة إلى الوصول إلى المتغير على مستوى الحزمة أو أقل (صنف، صنف فرعي) بالإمكان إعطاها مستوى وصول مختلف (private, protected, no modifier).
الفرق صغير، و التأثير كبير، و يبقى أيضاً من العلامات الفارقة بين المبرمج الهاوي و المبرمج المحترف، فالإنتباه إلى هذه التفاصيل من سمات المحترفين.
هل وجدت شيئاً مفيداً عن إستخدام Public؟ عبر عن إعجابك من هنا و عبر عن خواطرك البرمجية.
جزاك الله خير،، باش مهندس
السلام عليكم مدونة عُلوم .. ممكن استفسار
مرحباً بك عبر صفحة التواصل أخي رضا.
استمر يا أستاذ مواضيعك رائعة
أنت الأروع بوجودك في مدونة علوم أخي أسامة.
شرح رائع
شكراً لك
ياريت تستمروا على شرح الجافا
وشكـرا ?
شكراً لك على تواجدك ونحنُ نتمنى ذلك أيضاً 🙂
بالعكس انا استفيد من تدوينتك بارك الله فيك ارجو ان تواصصل ابداعاتك
سلمت حمزة، وبارك الله فيك