5 إستخدامات لـ Static تقربك من الإحتراف

[dropcap]static[/dropcap]كلمة مفتاحية مشهورة جداً في لغة الجافا، هذه الكلمة تُستخدم بكثرة في لغة الجافا في أوساط المبتدئين و المحترفين على حد سواء. و لكن الإستخدامات الخاطئة لـ static كثيرة جداً و مشهورة. ربما يرجع ذلك لقلة المعرفة عن أهمية الكلمة static و لماذا تستخدم، و هو الذي لن تُعاني منهُ بإذن الله إذا تعلمت و طبقت ما هو موجود بهذه التدوينة.

لماذا static

تاثير static على الذاكرة في جافاتؤدي static مهمة رائعة جداً فيما يتعلق بالذاكرة، فهي تساعد المبرمج على إنشاء نظام فعال في إستخدام الذاكرة، أي يقلل من إستخدام الذاكرة. و ذلك لأن كل متغير أو دالة أو غيره تم تعريفه بأنه static فذلك يعني أن هذا المتغير -فلنقل- سيتم حجز مكانه في الذاكرة لمرة واحدة فقط.

كما هو من المهم جداً صديقي أن تعرف أن المتغيرات و الدوال التي يتم تعريفها بـ static هي تتبع الـ class و ليس الـ object. و هذا يعني أن كل متغير -فلنقل- عرّفتهُ بأنه static فبإمكانك الوصول إليه دون أن تُنشئ object عن الـ class. فقط تحتاج إلى أن تستخدم هذه العبارة

classname.StaticElementName;

ففي البرنامج التالي أنادي المتغير name و الذي يمثل إسم الطالب، و أغير قيمته دون أن أُنشئ object.

public class CallStatic {
    
    public static void main(String args[]) {
        Student.name = "Ahmed";
        System.out.print(Student.name);
    }//end main
}

class Student {
    
    static String name;
    
}

مُخرج هذا البرنامج هو Ahmed.

أنقلك الآن إلى الإستخدامات المُفيدة جداً لـ static و التي من أجلها وجدت static، هذه الإستخدامات يجب أن تضعها نصب عينيك دائماً في كتابتك لشفراتك، فمثل هذه الإستخدامات هي ما يصنع الفارق بين المحترف و الهاوي.

  1. إستخدم static لتعريف المتغيرات غير القابلة للتغيير منطقياً

    كثيراً ما تجدا متغيرات محددة القيمة داخل الفئة ومعرفة بـ final و لكنها غير معرفة بـ static وفي نفس الوقت قيمتها لن تتغير اطلاقاً طوال حياة البرنامج.  فلماذا لا تجعلهُ مشتركاً و توفر المساحة بالذاكرة و تُظهر احترافيتك.‌

  2. إستخدم static مع الدوال التي من المنطقي إستخدامها قبل إنشاء object

    إذا أردت أن تنشئ class لسيارة، فمن الدوال التي يجب أن تضعها static مثلاً الدالة التي تغير وحدات قياس السرعة بين كيلومتر و ميل. فهذه الدالة قد تستخدمها بدون إنشاء الـ class لإجراء أي تغيير، و حتى بدون أن تمتلك سيارة بمعنى آخر، أما الدوال مثل سرعة السيارة الحالية فيجب أن لا تعرف كـ static لأنها متعلقة بكل سيارة لوحدها.‌

  3. لإجراء تغييرات على متغير static، أنشئ دالة static

    ليس دائماً، و لكن الشرط هو أن تكون لديك عمليات معقدة تجريها على متغير static، ففي هذه الحالة أنشئ دالة من النوع static حتى تستطيع أن تستدعيها دون أن تنشئ object، فالمتغير الـ static بالإمكان تغييره و إسناد قيمة له و تعديلها دون أن ينشأ أي object.‌

  4. إستخدم static مع المتغيرات المُشتركة بين الـ objects

    إبحث دائماً عنن المتغيرات المشتركة بين الـ objects، هذه المتغيرات إذا ما تغير في أحد الـ classes  سوف تتغير في البقية،عند تعريفك لـ class يخص طالب في جامعة، فمن المتغيرات التي يجب أن تعرف بـ static إسم الجامعة و تاريخ إنشاءها، لماذا؟ هذه المتغيرات غير قابلة للتغيير على مستوى الطلاب، فإذا أنشأت عدة objects فلن يتغير إسم الجامعة، أليس كذلك؟ و هنا تأتي فائدة static بأنه مهما كان عدد الـ objects تبقى المساحة المحجوزة للمتغير الخاص بإسم الجامعة واحدة، و لكن المتغيرات مثل إسم الطالب و عمره يتم إنشاءها مع كل object لوحده.‌

  5. إستخدم static مع الدوال غير المتعلقة بالـ object

    توجد بعض الدوال التي لا تتعلق بالـ object الذي سيتم إنشاؤه، و لكن يتم إنشاؤها كدوال مساعدة، ليس بالضرورة أن تكون هذه الدوال من النوع  الذي يُستدعى قبل إنشاء الـ object كما ذكرتُ لك سابقاً، بل أي دالة مساعدة غير متعلقة بالـ object إجعلها static لتوفر بعض المساحة بالذاكرة.

هذه 5 أفكار و استخدامات لـ static لتعتمدها أو لتتبناها في طريقة تفكيرك عند إنشاء أي برنامج، و ضمنياً توضح هذه الإستخدامات فوائد و أسباب وجود static في لغة الجافا، إذا أعجبت الأفكار إضغط على  و اكتب إنطباعك عن هذه الأفكار.

تدوينات مفيدة لك:

ابسط شرح للتمرير بالمرجع و التمرير بالقيمة مع حيلة لتعمل الجافا بالتمرير بالمرجع


قد يعجبك أيضا

ما رأيك؟ اترك تعليقاً أدناه


    1. أوه! توجد العديد من الأسباب. معرفة السبب الحقيقي تعتمد على مراجعة الشفرة المصدرية مع العلم أن وجود Static ليس ضرورياً في جميع الدوال.

  1. بارك الله فيك أخ مصطفى، حقيقة كان لدي بعض الإلتباس في استخدام static وقد زال بعد قراءة المقال .
    لك جزيل الشكر . 👍👍👍

  2. احينا يلزم امثلة حية كي توصل الفكرة وهذا ما استخلصته ولاحظته شكرا لك مثل موضوع الجامعة

  3. السلام عليكم
    بالنسبه للنقطه اﻻولى اختلف معك فيها بشكل بسيط
    ليس بالضروره تعريف الfinal على انه static
    الا في حاله وحده يفضل تعريفه على انه static اذا تم عمل initialization بشكل مباشر لل final
    لكن في حالة عدم initialization بشكل مباشر من الممكن عدم تعريفه على انه static وبالتاليى نسمح لكل instance بعمل initialization مناسب له

    1. وعليكم السلام ورحمة الله وبركاته حسام،

      واختلافنا في الكود لا يُفسد للود قضية 🙂 منطقياً وبرمجياً حديثُك صحيح ومكملٌ للنقطة الأولى.
      شكراً لك على هذا الايضاح.

{"email":"البريد الالكتروني غير صحيح","url":"رابط الموقع غير صحيح","required":"بعض الحقول المطلوبة لم تتم تعبئتها"}

نجاح!

تنبيه!

خطأ!