لا تستخدم public في شفرتك إلا…

عند بداية تعلم البرمجة تبدأ بإستخدام ما تتعلمه كما هو دون أن تدري ما هو معناه الحقيقي، و لكلٍ في هذا العُذر، و لكن بعد أن يقوى العود و تتسع المعارف لا بد أن نرجع إلى معرفة أصل الأشياء. ما هي؟ لماذا نستخدمها؟ هل هو إستخدام صحيح أم خاطئ؟ و هنا في هذا الميزان الكلمة المحجوزة في لغة الجافا 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؟ عبر عن إعجابك من هنا  و عبر عن خواطرك البرمجية.

مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

‫10 تعليقات

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

مقالات ذات صلة

زر الذهاب إلى الأعلى