المتغيرات في أي لغة برمجة لها دور حاسم. يتم تصنيف المتغيرات إلى متغيرات عالمية ومتغيرات محلية بناءً على نطاقها. يتمثل الاختلاف الرئيسي بين المتغيرات العالمية والمحلية في أنه يمكن الوصول إلى المتغيرات العالمية عالميًا في البرنامج بأكمله، بينما يمكن الوصول إلى المتغيرات المحلية فقط داخل الوظيفة أو الكتلة التي تم تعريفها فيها. في هذا الموضوع، سوف نفهم أولاً ما هي المتغيرات والنطاق، إلى جانب المتغيرات المحلية، والمتغيرات العامة، ثم الاختلافات بين كلا المتغيرين.
ما هو المتغير؟
المتغير هو اسم يطلق على موقع في الذاكرة لتخزين القيم في برنامج كمبيوتر. يتم استخدامه لتخزين المعلومات التي يمكن الرجوع إليها ومعالجتها في البرنامج.
يمكننا اختيار أي اسم للمتغير، ولكن يجب أن يتبع دلالات البرمجة. مثل ما يمكن أن يكون ، a، b، x، y، z، sub، div، الإجمالي، المتوسط، إلخ .
لنفترض أن هناك قيمتين، 10 و20، نريد تخزينهما واستخدامهما في برنامجنا. لهذا، نحن بحاجة إلى استخدام متغير، وسوف نقوم بالخطوات التالية:
- أولاً، سنقوم بإنشاء متغير باسم مناسب أو الإعلان عنه.
- قم بتعيين هذه القيم للمتغيرات لتخزينها.
- وبمجرد أن يتم تخزين هذه القيم، يمكننا استخدام هذه المتغيرات مع اسمها في برنامجنا.
كما نرى في الصورة أعلاه، هناك فتحتان للذاكرة، 001 و002، وقد أطلقنا أسماء على هذين الموقعين مثل A وB. A يحتوي على 10، وB يحتوي على 20.
لغات البرمجة المختلفة لها طرق مختلفة للإعلان عن المتغير. على سبيل المثال، في لغة C، يمكننا الإعلان عن المتغير بالطريقة التالية:
اللاتكس المشتق جزئيا
بناء الجملة: (بناء جملة الإعلان المتغير في لغة C)
datatype v1, v2, v3,....;
مثال:
#include void main(){ int a; int b; int sum; }
نطاق المتغير
يتم تعريف كل متغير ويمكن استخدامه ضمن نطاقه ويحدد البرنامج الذي يكون هذا المتغير متاحًا للاستخدام فيه. النطاق يعني عمر هذا المتغير. وهذا يعني أنه لا يمكن الوصول إلى المتغير أو رؤيته إلا ضمن نطاقه.
يمكن تعريف نطاق المتغيرات من خلال إعلانها، ويتم الإعلان عن المتغيرات بشكل رئيسي بطريقتين:
ما هو المتغير العالمي؟
- المتغيرات العامة هي تلك المتغيرات التي تم الإعلان عنها خارج جميع الوظائف أو الكتلة ويمكن الوصول إليها عالميًا في البرنامج.
- ويمكن الوصول إليه عن طريق أي وظيفة موجودة في البرنامج.
- بمجرد أن نعلن عن متغير عام، يمكن أن تختلف قيمته كما هو مستخدم مع وظائف مختلفة.
- عمر المتغير الشامل موجود حتى يتم تنفيذ البرنامج. يتم تخزين هذه المتغيرات في مواقع الذاكرة الثابتة التي يقدمها المترجم ولا يتم تنظيفها تلقائيًا.
- تُستخدم المتغيرات العامة في الغالب في البرمجة وهي مفيدة للحالات التي تحتاج فيها جميع الوظائف إلى الوصول إلى نفس البيانات.
مثال:
#include int a=50, b=40; void main() { printf('a = %d and b=%d',a,b); }
في المثال أعلاه، a وb هما المتغيران العامان.
تعدد الأشكال جافا
مزايا المتغير العالمي
- يمكن الوصول إلى المتغيرات العامة من خلال جميع الوظائف الموجودة في البرنامج.
- مطلوب إعلان واحد فقط.
- مفيد جدًا إذا كانت جميع الوظائف تصل إلى نفس البيانات.
عيوب المتغير العالمي
- يمكن تغيير قيمة المتغير الشامل عن طريق الخطأ حيث يمكن استخدامه بواسطة أي وظيفة في البرنامج.
- إذا استخدمنا عددًا كبيرًا من المتغيرات العامة، فهناك احتمال كبير لحدوث خطأ في البرنامج.
ما هو المتغير المحلي؟
- لا يمكن الوصول إلى هذه المتغيرات إلا من خلال الوظيفة التي تم الإعلان عنها.
- عمر المتغير المحلي يكون ضمن الدالة الخاصة به فقط، مما يعني أن المتغير موجود حتى يتم تنفيذ الدالة. بمجرد اكتمال تنفيذ الوظيفة، يتم تدمير المتغيرات المحلية ولن تعد موجودة خارج الوظيفة.
- السبب في النطاق المحدود للمتغيرات المحلية هو أن المتغيرات المحلية يتم تخزينها في المكدس، وهو ديناميكي بطبيعته ويقوم تلقائيًا بتنظيف البيانات المخزنة بداخله.
- ولكن من خلال جعل المتغير ثابتًا باستخدام الكلمة الأساسية 'static'، يمكننا الاحتفاظ بقيمة المتغير المحلي.
مثال:
#include void main() { int x=50, y=40; printf('x = %d and y=%d',x, y); }
في المثال أعلاه، قمنا بتعريف متغيرين x و y داخل الدالة الرئيسية. وبالتالي هذه هي المتغيرات المحلية.
مزايا المتغير المحلي
- يمكن استخدام نفس اسم المتغير المحلي في وظائف مختلفة حيث يتم التعرف عليه فقط من خلال الوظيفة التي تم الإعلان عنها.
- تستخدم المتغيرات المحلية الذاكرة لفترة محدودة فقط عند تنفيذ الوظيفة؛ بعد ذلك يمكن إعادة استخدام نفس موقع الذاكرة.
عيوب المتغيرات المحلية
- يقتصر نطاق المتغير المحلي على وظيفته فقط ولا يمكن استخدامه بواسطة وظائف أخرى.
- غير مسموح بمشاركة البيانات بواسطة المتغير المحلي.
مخطط مقارنة بين المتغير العالمي والمتغير المحلي
المتغير العالمي | متغير محلي |
---|---|
يتم الإعلان عن المتغيرات العامة خارج كافة كتل الوظائف. | يتم الإعلان عن المتغيرات المحلية داخل كتلة الوظيفة. |
يبقى النطاق في جميع أنحاء البرنامج. | النطاق محدود ويبقى ضمن الوظيفة التي تم الإعلان عنها فقط. |
يؤثر أي تغيير في المتغير العام على البرنامج بأكمله، أينما يتم استخدامه. | أي تغيير في المتغير المحلي لا يؤثر على وظائف البرنامج الأخرى. |
يوجد متغير عام في البرنامج طوال فترة تنفيذ البرنامج. | يتم إنشاء متغير محلي عند تنفيذ الدالة، وبمجرد الانتهاء من التنفيذ، يتم تدمير المتغير. |
ويمكن الوصول إليه في جميع أنحاء البرنامج من خلال جميع الوظائف الموجودة في البرنامج. | لا يمكن الوصول إليه إلا من خلال عبارات الوظيفة التي تم الإعلان عنها، وليس من خلال الوظائف الأخرى. |
إذا لم تتم تهيئة المتغير العام، فسيأخذ صفرًا بشكل افتراضي. | إذا لم تتم تهيئة المتغير المحلي، فإنه يأخذ القيمة المهملة بشكل افتراضي. |
يتم تخزين المتغيرات العامة في مقطع البيانات بالذاكرة. | يتم تخزين المتغيرات المحلية في مكدس في الذاكرة. |
لا يمكننا الإعلان عن العديد من المتغيرات بنفس الاسم. | يمكننا الإعلان عن متغيرات مختلفة بنفس الاسم ولكن في وظائف أخرى. |
أمثلة لفهم الاختلافات بين المتغير المحلي والعالمي
الآن دعونا نفهم الأمثلة في لغات البرمجة المختلفة لفهم الفرق بين المتغيرات المحلية والعالمية بشكل أفضل.
محلي مقابل عالمي في C
مثال 1:
#include // Global variables int a; int b; int Add() { return a + b; } int Mul() { int c=10; //Local Variable int d=20; ////Local Variable return c*d; } void main() { int Ans1, Ans2, c=30;// Local variable a = 50; b = 70; Ans1 = Add(); Ans2= Mul(); printf('The addition result is: %d ',Ans1); printf('The Multiplication result is: %d ',Ans2); printf('%d ', c); }
انتاج:
تخطي القائمة
The addition result is: 120 The Multiplication result is: 200 30
كما نرى في البرنامج أعلاه، اتخذنا أ و ب المتغيرات العامة التي يتم الوصول إليها في وظائف مختلفة مثل Add() و main(). في حين أن هناك أيضًا متغيرات محلية مثل c، وd، وAns1، وAns2، والتي يتم الوصول إليها من خلال تلك الوظائف التي تم الإعلان عنها فقط.
إذا حاولنا استخدام متغيرات c وd خارج الدالة Mul()، فسيتم استخدامها كمتغيرات جديدة. كما أظهرنا من خلال أخذ c في الدالة main() أيضًا، يتم التعامل معه كمتغير جديد.
المحلية مقابل. العالمية في بايثون
مثال 1:
v1 = 'Hey, I am Global Variable!, I can be used everywhere in the program.' #globalvariable def func1(): v2='Hey, I am Local Variable!, I can be used within this block only in the program.' #localvariable print(v2) func1() #calling func1 def func2(): print(v1) func2() #callin func2
انتاج:
Hey, I am a Local Variable!, I can be used within this block only in the program. Hey, I am Global Variable!, I can be used everywhere in the program.
في البرنامج أعلاه، أخذنا متغيرًا عامًا واحدًا v1 ومتغيرًا محليًا واحدًا v2. نظرًا لأن الإصدار v1 عالمي، فيمكن الوصول إليه بسهولة في أي وظيفة، وv2 محلي؛ يتم استخدامه فقط ضمن وظيفتها المعلنة. ولكن إذا حاولنا استخدام v1 في func1، فسيظهر خطأ. دعونا نرى المثال أدناه:
مثال-2
v1 = 'Hey, I am Global Variable!, I can be used everywhere in the program.' #globalvariable def func1(): v2='Hey, I am Local Variable!, I can be used within this block only in the program.' #localvariable print(v2) print(v1) func1() #calling func1 def func2(): print(v1) print(v2) func2() #callin func2
إذا حاولنا الوصول إلى الإصدار v1، فيمكن الوصول إليه بسهولة في fun1 و func2. ولكن إذا حاولنا الوصول إلى الإصدار 2 خارج وظيفته، وهو ما يعني في func2، فسيعطي خطأ وقت التشغيل. سنحصل على الإخراج أدناه بعد تنفيذ الكود أعلاه:
خطا وقت التشغيل:
تحويل سلسلة إلى كثافة العمليات
NameError: global name 'v2' is not defined
انتاج:
Hey, I am Local Variable!, I can be used within this block only in the program. Hey, I am Global Variable!, I can be used everywhere in the program. Hey, I am Global Variable!, I can be used everywhere in the program.
المحلية مقابل. المتغير العالمي في جافا
في Java، لا يوجد مفهوم للمتغيرات العامة؛ نظرًا لأن Java هي لغة برمجة موجهة للكائنات، فكل شيء جزء من الفصل. ولكن إذا أردنا جعل المتغير متاحًا عالميًا، فيمكننا جعله ثابتًا باستخدام a ثابتة الكلمة الرئيسية.
class Demo { // static variable static int a = 10; // non-static or local variable int b = 20; } public class Main { public static void main(String[] args) { Demo obj = new Demo(); // accessing the non-static variable System.out.println('Value of non-static variable is: ' + (obj.b)); // accessing the static variable System.out.println('Value of static variable is:' + (Demo.a)); } }
انتاج:
Value of non-static variable is: 20 Value of static variable is:10
في البرنامج أعلاه، استخدمنا متغيرًا محليًا واحدًا أو متغيرًا غير ثابت ومتغيرًا ثابتًا واحدًا. يمكن الوصول إلى المتغير المحلي باستخدام كائن الفئة Demo، بينما يمكن الوصول إلى المتغير الثابت باستخدام اسم الفئة.