ألدرس السادس - المتغيرات

مفهوم المتغيرات في C++

المتغيرات ( variable ) عبارة عن أماكن يتم حجزها في الذاكرة بهدف تخزين بيانات فيها أثناء تشغيل البرنامج.
النوع الذي نعطيه للمتغير يجعل نظام التشغيل يحدد نوع البيانات الذي يمكن تخزينه في المساحة المحجوزة لهذا المتغير في الذاكرة.

على سبيل المثال, إذا أردت تخزين رقم في متغير, يجب أن يكون نوع المتغير في الأساس مخصص لتخزين الأرقام حتى يسمح لك بذلك.
و إذا أردت تخزين نص في المتغير يجب أن يكون نوع المتغير في الأساس مخصص لتخزين النصوص و هكذا.

مثال

main.cpp

 

  1. #include
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 10; // قيمته تساوي 10 a هنا قمنا بتعريف متغير إسمه
  6. cout << "a = " << a; // a هنا قمنا بطباعة قيمة المتغير
  7.  
  8. return 0;
  9. }

 

سنحصل على النتيجة التالية عند التشغيل.

a = 10

 

أساليب تعريف المتغيرات في C++

في البداية أنواع المتغيرات هي نفسها أنواع البيانات الأولية التي ذكرناها في الدرس السابق و هي:
int - float - double - bool - char

الآن, من خلال الأمثلة سنعلمك عدة أساليب يمكنك إتباعها لتعريف المتغيرات و تصغير حجم الكود.

 

المثال الأول

في حال كنت تريد تعريف عدة متغيرات من نفس النوع و بدون إعطائهم قيم أولية.

تستطيع تعريفهم هكذا.

  • int a;
  • int b;
  • int c;

و تستطيع إختصار الكود كالتالي.

  • int a, b, c;

 

المثال الثاني

في حال كنت تريد تعريف عدة متغيرات من نفس النوع و إعطائهم قيم مباشرةً عند إنشائهم.

تستطيع تعريفهم هكذا.

  • int a = 10;
  • int b = 20;
  • int c = 30;

و تستطيع إختصار الكود كالتالي.

  • int a=10, b=20, c=30;

 

المثال الثالث

في حال كنت تريد تعريف عدة متغيرات من نفس النوع و لكن طبيعتهم مختلفة و بدون قيم.
هنا بالرغم من أن a عبارة عن متغير, b عبارة عن مصفوفة أحادية, و c عبارة عن مصفوفة ثنائية; إلَا أنهم جميعهم نوعهم int.

تستطيع تعريفهم هكذا.

  • int a;
  • int b[5];
  • int c[3][4];

و تستطيع إختصار الكود كالتالي.

  • int a, b[5], c[3][4];

 

مصطلحات مهمة حول المتغيرات في C++

ركز جيداً على المفاهيم التالية لكي تعرف كيف تصحح الأخطاء التي قد تتعرض لها عند كتابة الكود.

  • عملية تعريف متغير بدون إعطائه قيمة تسمى Declaration.
  • عملية إعطاء قيمة لمتغير تم إنشاؤه سابقاً تسمى Assigning.
  • عملية تعريف متغير و إعطائه قيمة مباشرةً عند إنشائه تسمى Initialisation.

 

أمثلة شاملة

هنا فعلنا Declare لمتغير جديد, أي قمنا بتعريف متغير جديد بدون إعطائه قيمة أولية.

  • int a;

هنا فعلنا Assign لمتغير, أي قمنا بإعطاء قيمة لمتغير كان في الأصل موجوداً.

  • a = 10;

هنا فعلنا Initialise لمتغير جديد, أي قمنا بإنشاء متغير جديد و إعطائه قيمة أولية.

  • double Sum = 0;

 

ملاحظة

إذا قمت بتعريف متغير بدون إعطائه أي قيمة, ثم حاولت طباعة قيمته فإن مترجم لغة C++ يقوم بإرجاع آخر قيمة كانت موجودة في الذاكرة مكان هذا المتغير.
إذاً هذا الأمر يحدث في حال حاولت طباعة قيمة متغير لم تفعل له سوى Declare.

 

إرشادات مهمة لمعالجة الأخطاء في C++

بعد أن فهمت المصطلحات الأساسية الخاصة بالمتغيرات, سنقوم الآن بإعطائك بعض الأمثلة التي تحتوي على أخطاء مقصودة لتعليمك كيف تعرف طبيعة الخطأ و بالتالي كيف تصلح الخطأ بنفسك.

 

الخطأ الأول

أحياناً يقوم المبرمج بتعريف متغير و عرض قيمته قبل أن يعطيه أي قيمة فيظهر له قيم عشوائية فيه.
أي المشكلة أنه حاول عرض قيمة متغير فعل له Declare فقط بدون أن يفعل له Assign.

مثال

main.cpp

  1. #include
  2. using namespace std;
  3. int main()
  4. {
  5. int a; // بدون إعطائه أي قيمة أولية a هنا قمنا بتعريف متغير إسمه
  6. cout << "a = " << a; // a هنا قمنا بطباعة قيمة المتغير
  7.  
  8. return 0;
  9. }

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
القيمة التي تظهر في المتغير a هي قيمة عشوائية كانت موجودة في الذاكرة كما ذكرنا قبل قليل.

  • a = 4360638

 

في برنامج CodeBlocks سيظهر لك التحذير التالي الذي يعني أنك تحاول طباعة قيمة متغير لا يملك قيمة في الأساس.

warning: 'a' is used uninitialized in this function [-Wuninitialized]

 

الخطأ الثاني

أحياناً يقوم المبرمج بوضع إسم متغير بدون أن يكون قد قام بتعريف هذا المتغير من قبل.
أي المشكلة أنه نسيَ أن يفعل له Declare. من الأساس و هذا الأمر يؤدي لعدم تشغيل البرنامج كله.

مثال

main.cpp

  1. #include
  2. using namespace std;
  3. int main()
  4. {
  5. cout << "a = " << a; // مع أننا لم نقم بتعريفه بالأساس a هنا قمنا بطباعة قيمة
  6.  
  7. return 0;
  8. }

 

سيظهر لك الخطأ التالي عند التشغيل و الذي يعني أنك تحاول طباعة قيمة متغير لم تقم بتعريفه بالأساس.

error: 'a' was not declared in this scope

 

الخطأ الثالث

في الدرس السابق شاهدنا أن كل نوع بيانات يمكنه أن يحتوي على قيم محددة حيث شاهدنا أصغر و أكبر قيمة يمكن تخزينها فيه.

الأن عليك معرفة أنه في حال كانت القيمة التي تحاول تخزينها في المتغير أكبر من القيمة التي يمكن تخزينها فيه, سيتم وضع جزء منها في المتغير و ليس القيمة التي كنت تريد تخزينها فيه و بالتالي ستخسر القيمة الحقيقية التي كنت تريد تخزينها. هذا الأمر يجب أن تنتبه له جيداً حتى تخزّن البيانات بشكل صحيح بدون فقدان أي جزء منها.

الآن, بما أن النوع int يمكنه أن يخزن القيمة 2147483647 كحد أقصى كما شاهدنا في الدرس السابق, لاحظ ما سيحدث إن حاولنا تخزين قيمة أكبر من القيمة القصوى التي يمكن أن يستوعبها فيه.

مثال

main.cpp

  1. #include
  2. using namespace std;
  3. int main()
  4. {
  5. int a = 10000000000000; // و نحن ندرك أنه لا يمكن تخزين هذه القيمة الكبيرة فيه a هنا قمنا بوضع قيمة في المتغير
  6. cout << "a = " << a;
  7.  
  8. return 0;
  9. }

 

سنحصل على نتيجة تشبه النتيجة التالية عند التشغيل.
القيمة التي تظهر في المتغير a هي جزء من القيمة التي كنت تحاول تخزينها في المتغير كما ذكرنا قبل قليل.

  • a = 1316134912

 

في برنامج CodeBlocks سيظهر لك التحذير [Overflow] الذي يعني أن المساحة المخصصة للمتغير في الذاكرة لا يمكنها أن تستوعب القيمة التي تحاول تخزينها فيه.

warning: overflow in implicit constant conversion [-Woverflow]

 

في الدرس التالي سنتعرف على الرموز التي يمكن أن نستخدمها في الكود و التي تسمى بالعوامل.