الفروق الرئيسية بين المتغير المحلي والمتغير العام Local and Global Variable

اقرأ في هذا المقال


مفهوم المتغير Variable:

المتغير هو اسم يتم تعيينه لمساحة تخزين يمكن للبرنامج معالجتها، كما يحدد نوع المتغير حجم ذاكرة المتغير، يحدد نوع المتغير أيضاً نطاق القيم التي يجب تخزينها داخل تلك الذاكرة وطبيعة العمليات التي يمكن تطبيقها على هذا المتغير.

ما هو نطاق المتغيرات؟

نطاق المتغير هو ببساطة عمر المتغير، إنها كتلة من الكود البرمجي التي بموجبها يكون المتغير قابلاً للتطبيق أو على قيد الحياة. في المثال أدناه، تم تعريف متغير “x” داخل الدالة “foo”، ويظل نطاق هذا المتغير داخل تلك الدالة ولا يمكن استخدامه خارج هذه الدالة.

function foo(){ var x; }

هناك ثلاثة أماكن حيث يمكنك تعريف المتغيرات فيها، وهي:

  • المتغيرات المحلية: داخل دالة أو (block).
  • المتغيرات العامة: خارج جميع الدوال.
  • المعلمات الرسمية: في تعريف معلمات الدالة.

مفهوم المتغير المحلي Local Variable:

يُعرّف المتغير المحلي بأنه نوع من المتغير المُعرّف داخل (block) برمجي أو داخل الإجراءات الفرعية مثل جمل (for و if)، ويمكن استخدامها فقط داخل كود الإجراء الفرعي أو (block) الذي تم تعريف المتغير فيه، ويظل المتغير المحلي موجود حتى يتم تنفيذ (block) الدالة، بعد ذلك، سيتم تدميره تلقائيًا. في المثال أدناه يعتبر ‘a’ و ‘b’ متغيران محليان.

public int add(){ int a = 4; int b = 5; return a+b; }

مفهوم المتغير العام Global Variable:

المتغير العالمي في البرنامج هو متغير محدد خارج الإجراء الفرعي أو الدالة، له نطاق عالمي يعني أنه يحتفظ بقيمته طوال عمر البرنامج، بالتالي، يمكن الوصول إليها في جميع أنحاء البرنامج من خلال أي دالة محددة داخل البرنامج، ما لم تكن مظللة. في المثال أدناه يعتبر ‘a’ و ‘b’ متغيران عالميان.

int a = 4; int b = 5; public int add(){ return a+b; }

الفروق الرئيسية بين المتغير المحلي والمتغير العام:

المتغير المحلي المتغير العام 
1.

نطاق

تم تعريفه داخل دالة.

تم تعريفه خارج دالة.

2.

قيمة

إذا لم تتم إسناد قيمة له، فسيتم تخزين قيمة (garbage) له.إذا لم يتم إسناد قيمة له، فسيتم تخزين قيمة الصفر كقيمة افتراضية.
3.

حياة المتغير

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

مزايا استخدام المتغيرات العامة:

  • يمكنك الوصول إلى المتغير العالمي من جميع الدوال أو الوحدات في البرنامج.
  • ما عليك سوى تعريف المتغير العالمي مرة واحدة خارج الوحدات النمطية.
  • يستخدم بشكل مثالي لتخزين “الثوابت”؛ لأنه يساعدك في الحفاظ على التناسق.
  • المتغير العالمي مفيد عندما تقوم دوال متعددة بالوصول إلى نفس البيانات.

مزايا استخدام المتغيرات المحلية:

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

عيوب استخدام المتغيرات العامة:

  • إذا تم تعريف العديد من المتغيرات على أنها عالمية، ستظل في الذاكرة حتى اكتمال تنفيذ البرنامج، هذا يمكن أن يسبب مشكلة “نفاد الذاكرة”.
  • يمكن تعديل قيمة البيانات المتغيرات العالمية من بأي وظيفة، أي جملة مكتوبة في البرنامج يمكن أن تغير قيمة المتغير العام، قد يعطي هذا نتائج غير متوقعة في بيئات متعددة المهام.

عيوب استخدام المتغيرات المحلية:

  • عملية تصحيح المتغير المحلي صعبة للغاية.
  • البيانات المشتركة المطلوبة لتمريرها بشكل متكرر لأن مشاركة البيانات غير ممكنة بين الوحدات.
  • لديهم نطاق محدود للغاية.

المصدر: Difference between Local and Global VariableGlobal and Local Inversions in C++Difference Between Local and Global VariableDifference between Local variable and Global Variable


شارك المقالة: