الجمعة، 7 أغسطس 2015

المتغيرات | Variables



المتغيرات

المتغيرات هي المكان لتخزين جزء من البيانات. ولها اسم وقيمة ونوع. مثالاً على ذلك العبارة التالية تدعى (adeclaration  ):
int pin = 13;
اصنع متغير الذي يحمل الاسم (pin), وقيمته (13), ونوعه (int).فيما بعد في البرنامج ,يمكنك الإشارة الى هذا المتغير بواسطة اسمة ,في أي وضع سوف يتم استخراج قيمته واستخدامها. مثلاً العبارة ادناه.
pinMode(pin, OUTPUT);
انها قيمه الـ pin 13الذي سيمر من خلال الدالةpinMode().في هذا الحالة ,لست بحاجه لاستخدام المتغير , هذه العبارة ستعمل بشكل جيد:
pinMode(13, OUTPUT);
فوائد المتغير في هذا الحالة هو انك فقط بحاجه الى اختيار رقم الـpinلمره واحده, لكن باستطاعتك استخدام المتغير عده مرات. اذا قررت فيما بعد تغيير من الـpin13الى  الـpin 12,انت فقط بحاجه لتغيير نقطه واحده في الكود البرمجي. وكذلك بامكانك إعطائه اسم موصوف لجعل الامر اكثر وضوح.((مثلاً البرنامج الذي يتحكم في RGB LEDيمكن ان يمتلك متغيرات تسمى redPin,greenPin,bluePin). 
فائدة اخرى غير القيمة هي الرقم الاكثر اهمية، يمكن ان تغيير القيمة المتغير باستخدام
pin = 12;

سيتم تغيير قيمة المتغير الى (12).مع ملاحظه اننا لم نحدد نوع المتغير: فهو لم يتغير بهذه العباره. اسم المتغير دائما مرتبط مع النوع ;فقط الذي يتغير هو قيمته.
¨     ملاحظة  يجب تعريف المتغير قبل إمكانية تحديد قيمة له.
اذا ضمنت العبارة السابقة في برنامج ومن غير العبارة الأولى (أعلاه),ستأتيك رساله مفادها:"error pin was not declared in his scope"
عندما تعين متغير لآخر, بمعنى انت تصنع نسخه من قيمته وتخزين هذه النسخة في مكان من الذاكرة مرتبط مع متغير ثاني. تغيير واحد لا يؤثر على البقية. مثالا على ذلك:
int pin = 13;
int pin2 = pin;
pin = 12;
only pin has the value 12; pin2 is still 13.
هنا في المثال أعلاه: فقط (pin) له القيمة (12) ; والـ(pin2) فبقي على القيمة (13).
عندما تظهر رساله خطأ مفادها يوجد متغير غير معرف .هذا يفسر انه بامكانك تعريفه واستخدامه .اذا كنت تود انت تستخدم هذا المتغير في أي مكان من برنامجك يمكنك تعريفه في اعلى الكود البرمجي وهذا يسمى(globalvariable) مثالاً:
int pin = 13;

void setup()
{
  pinMode(pin, OUTPUT);
}

void loop()
{
  digitalWrite(pin, HIGH);
}
بامكانك ملاحظه ,pin  تستخدم في كلا الدالتين()setupو()loop.وكلا الدالتين يدلان على نفس المتغير لذلك التغيير على أحدهما سيؤثر على قيمته في الثاني .
int pin = 13;

void setup()
{
  pin = 12;
  pinMode(pin, OUTPUT);
}

void loop()
{
  digitalWrite(pin, HIGH);
}
هنا الدالة ()digitalWriteتستدعى من الدالة()loop ستنقل قيمة الـ(12)وذلك لان هذه القيمة معينه للمتغير في الدالة ()setup.
اذا كنت بحاجه الى استخدام متغير في داله منفرده ,يمكنك تعريفه وفي هذه الحالة سيقتصر على داله واحده فقط.

void setup()
{
  int pin = 13;
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH);
}
في هذه الحالة المتغير pin يمكن ان يستخدم فقط داخل الداله()setup.اذا حاولت فعل شيء كهذا :
void loop()
{
  digitalWrite(pin, LOW); // wrong: pin is not in scope here.
}
ستأتيك رساله كما في السابق "error:'pin'was not declared in this scope"
حتى وانت عرفت الـ pinفي أي مكان من برنامجك. كنت تحاول استخدامه في مكان ما خارج نطاقه.
أخيرا قد يتسلل الى ذهنك هل يمكن جعل جميع المتغيرات (global
إذا لم اعرف اين سأحتاج المتغيرات
لماذا يجب ان احدد نطاقها بداله واحده فقط؟
الجواب هو امكانيه وسهوله التعرف الى ما يحدث لها .اذا كانت المتغير (global)قيمته من الممكن ان تتغير في أي مكان في الكود البرمجي, ما يعني انك تحتاج لفهم  كل البرنامج لتعرف ماذا سيحصل للمتغير مثال: اذا كان متغيرك يمتلك قيمة لم تتوقعها ,ولكن من السهولة إيجاد من أي أتت القيمة اذا كانت المتغير يمتلك مدى محدود.


هناك تعليقان (2):