عالم المتغيرات Variables
من الدروس السابقة الان صار بامكانك بث او اظهار رسالة على الشاشة , جيد جدا رغم اننا لا نقوم باشياء خارقة للعادة او مثيرة للدهشة الا انها تقدم كبير في مشوارك نحو تعلم البرمجة بلغة C او اي لغة اخرى , لكن كما قلت الامر ليس كافي , و هذا راجع الى انك لست على اطلاع بما يسمى المتغيرات في البرمجة , فهي عالم جديد سوف تكتشفه في هذا الشرح او الدرس من الدورة .
– باختصار شديد هي تتمثل في اعطاء ارقام للحاسوب لكي يعمل بها او يتذكرها , سوف نتعلم طريقة تخزين ارقام في الذاكرة .
– اولا سوف نبداء بشرح و تفسير الذاكرة الموجودة داخل جهازك .
اقراء ايضا
تعلم البرمجة بلغة C للمبتدئين : 3 انشاء اول برنامج لك
سؤال : كيف تعمل الذاكرة ؟ كم من انواع مختلفة يملك الكمبيوتر ؟ .
يمكن ان يبدو الامر سهل على البعض , لكن نحن نُعمم الدورة و الشرح لكي يمكن اتباع الدروس و الشروحات لا يقتصر على المطلعين بل للجميع بدون استثناء , بما فيها الاشخاص التي لا تعرف شئ عن الكمبيورت و الذاكرة بداخله .
تعرف عن كل ما يتعلق بذاكرة الحاسوب
المشكلة اننا بحاجة الى ذاكرة سريعة جدا ( للحصول على معلومة او رقم بشكل فائق السرعة ) و اخرى كبيرة في الحجم للتخزين , و الى اليوم لم نتمكن من اختراع الاثنين في نوع واحد , حتى SSD ليست سريعة بدرجة كبيرة تسمح بالاستغناء عن RAM , ايضا الذاكرة السريعة جدا يكون سعرها مرتفع لذالك يتم وضعها بقدر قليل .
– لتفادي الاشكالية , فقد اطررنا الى وضع ذاكرة سريعة جدا لكن بقدر قليل و اخرى بطيئة لكن بحجم كبير .
الفرق بين انواع الذكرة
لاعطائك فكرة عن القضية . اليك مختلف انواع الذاكرة الموجودة داخل الكمبيوتر :
The registers السجلات : ذاكرة فائقة السرعة متواجدة مباشرة في المعالج .
The cache memory ذاكرة التخزين المؤقت : تقوم بالوصل بين register و الذاكرة الحية
The RAM ذاكرة الوصول العشوائي : هذا هو النوع الذي سوف نعمل به كثيرا في الدورة , و يطلق عليها اسم الذاكرة الحية .
The hard drive القرص الصلب : اعتقد ان الجميع يعرفها و هي تستعمل في تخزين الملفات .
– تم ترتيب الانواع على حسب سرعتها من ال registers الى الابطاء و هي المتواجدة في القرص الصلب , لو انكم تابعتم جيدا الشرح اعلاه انت على اطلاع ان الاسرع هي الاقل تواجد من ناحية الكمية و الابطاء هي الاكثر حجم و كمية .
ما يجب حفظه من كل هذا ؟
نحن نريد توجيهك و اطلاعك الى اشياء مُعينة , و الان انت تعلم ان في البرمجة سوف نعمل خصيصا بالذاكرة الحية , سوف نرى ايضا كيف نقراء و نكتب على القرص الصلب , لكي نقوم بقراءة و انشاء ملفات ( هذا ما سوف نتعلمه في ما بعد ) , اما في ما يخص ذاكرة السجل و ذاكرة التخزين المؤقت لن نلمس فيها ابدا في هذه الدورة على الاقل .
ملاحظة : في لغات منخفظة المستوى ( مثل ما تعلمناه من قبل عن درجة لغات البرمجة ) ان نسيت يمكنك مراجعت الدرس الاول تعلم البرمجة بلغة C للمبتدئين : 1 مقدمة و شرح المفاهيم الاولية , لغة مثل Assembly المختصرة في رمز asm , المبرمجين يتعاملون مباشرة مع ذاكرة السجل , و يمكن القول ان عمل برنامج بسيط بهذا النوع من لغة البرمجة هو عمل جبار , لكن في منتهى الدقة , الحمد لله في لغة C و العديد من لغات البرمجة الامر اسهل بكثير .
– يجب عليك تعلم شئ اخر , وحده القرص الصلب يمسك او يبقي على الدوام المعلومات و البيانات المخزنة عليه , كل باقي الذاكرات هي مؤقتة , حين تُعطل عمل الكمبيوتر و توقفه , بانهاء التشغيل او ما شبه سوف تختفي و تَزول , حمدا لله ان القرص الصلب موجود ليذكر الحاسوب من هو , و ما هي المعلومات المتواجدة عليه , و كيف يجب ان يشتغل اصلا 😔 .
الذاكرة الحية بالصور
ما دمنا سوف نعمل كثيرا بالذاكرة الحية , من الافضل ان نريكم اياها بالصور , و نعرفكم عليها في الواقع , سوف نقربها لكم تدريجيا
1- نبداء بصورة للكمبيوتر العادي
طبعا انت تعرف مختلف الاجزاء التي يتكون منها جهاز الكمبيوتر , الفارة , لوحة المفاتيح , الشاشة و ما يهمنا هو وحدة المعالجة المركزية central unity .
2- وحدة المعالجة المركزية central unity
نركز على وحدة المعالجة المركزية central unity , هي القلب النابض للحاسوب و هو الجزء الذي يحتوي على جميع مكونات الذاكرة و مختلف القطع المهمة جدا لتشغيل الحاسوب .
3- الذاكرة الحية هي على شكل قطع ايليكترونية , ما يهمنا هو الموجود بداخل central unity .
نعم اعلم ان كل هذا بالنسبة لك فوضى عارمة , لكن لا عليك لن نطلب منك تعلم كيف يعمل كل هاذا , فقط نريدك ان تعلم اين تتمركز الذاكرة الحية في الكمبيوتر العادي ( المشار لها بالسهم المتعدد الالوان للفت و جلب انتباهك )
4- شريط ذاكرة الوصول العشوائي RAM memory module
هذا هو شكل الشريط لوحده
هذا النوع من الذاكرة تسمى في اللغة الشائعة RAM , لا تتعجب ان استعملنا هاذه العبارة في ما يتلو من الشروحات .
رسم تخطيكي لل RAM
حين النظر الى شريط ال RAM و تصويره عن قرب لا نرى الكثير , لكن من الضروري علينا معرفة طريقة عمله من الداخل , و بالتلي نكون قد وصلنا الى المبتغى من كل هذا التدريج في الصور و الشرح .
الان اقترح عليكم رسم تخطيطي عملي من ذاكرة الوصول العشوائي RAM , الرسم مبسط جدا , لاننا لا نحتاج الى العديد من المعارف و لا الى التدقيق في كل شئ بالتفصيل , حين تتمكن من فهم و تذكر هذا الرسم سوف تكون قد تعلمت الكثير .
مثل ما هو مبين , يجب التعرف و التفريق بين عمودين اثنين :
1 . العناوين : العنوان يسمح للكمبيوتر بالتفريق و تحديد البيانات في RAM , نبداء بالعنوان رقم 0 و ننتهي الى اعداد مهولة مثل ما وضعت 3448765900126 …. و اكثر , لانني لا اعلم عدد العناوين الموجودة على الذاكرة الحية … ( نعم انا لا اعلم كل شئ ) , العدد يختلف مع حجم ال RAM الموجودة , كل ما كان حجم الرام كبير كل ما صار عندك عدد عناوين اكثر , ومنها نستنتج انه يمكن التخزين اكثر .
2 . القيمة : في كل عنوان نخزن قيمة ( على شكل رقم او عدد ) , جهازك يقوم بتخزين هذه الارقام و الاعداد لكي يتذكرها لاحقا , لا يمكنه تخزين الا رقم او عدد واحد في كل عنوان .
ال RAM لا يمكنها تخزن الا الارقام …
سؤال : كيف يفعل الحاسوب لتخزين الكلمات و ما شبه ان كان يخزن الا الارقام و الاعداد ؟
سؤال وجيه… , للعلم ان حتى الحروف هي عبارة عن ارقام بالنسبة للحاسوب , فمثلا عبارة كاملة او كلمة , هي مجرد اعداد متتالية بالنسبة له , يوجد جدول يقوم بتحديد كل عدد و ما يقابله من حرف موجود , هذا الجدول يقول مثلا ان العدد 67 يقابله حرف Y , لن ندخل في تفاصيل اكثر سوف نتطرق الى مثل هذه الامور لاحقا في الدروس .
نرجع الى الرسم التخطيطي , الامر بسيط جدا , حين الكمبيوتر يريد ان يحفظ “مؤقتا ” الرقم 5 مثلا ( يمكن ان يكون عدد المحاولات المتبقية في لعبة مثل ماريو ) يضعه في مكان فارغ حيث توجد مساحة للتخزين على عنوان خالي من الارقام , مثلا في العنوان 3448765900126 , بعدها حين يريد معرفة هذا الرقم ليتذكره , يذهب مباشرة الى العنوان 3448765900126 , ليجد الرقم 5 , هكذا تعمل الذاكرة الحية .
قد يكون الامر غير واضح للكثيرين لكن سوف نوضح اكثر في بقية الشرح , وكل شئ سوف ياخذ معناه من كل ما قدمناه لك من البداية في هذه التدوينة المخصصة للذاكرة .
الاعلان عن متغير
صدقني ان كل ما قمنا به الى حد الان هو مفيد جدا لفهم ما سوف نشرحه الان و في بقية الدروس , الان و قد تعلمت و عرفت كل ما ينبغي عليك معرفته سوف نرجع الى البرمجة .
ما هو المتغيير ؟
هو معلومة مؤقة نخزنها في RAM , نسميها بالمتغير لانه قيمة يمكن ان تتغير حين تَشغيل البرنامج , مثلا رقم 5 الذي استعملناه لعدد المحاولات ( عدد الرؤوس او الحياة المتبقية في لعبة مثل ماريو Mario … ان كنت لا تعرف لعبة ماريو يرجى مغادرة الشرح فورا 😆 ) يفترض ان تنخفظ مع مرور الوقت حين تَعثر اللاعب , ان وصل الرقم الى 0 … نعلم ان اللاعب قد خسر game over , برامجنا مثل ما سوف تلاحظه سريعا , متكونة بشكل كبير من المتغيرات .
في لغة البرمجة C المتغيرات متكونة من شيئين اثنين :
قيمة : و هي العدد الذي تخزنه ( مثل ما استعملنا رقم 5 للمثال )
اسم : هي ما يسمح بالتعرف عليها , في لغة البرمجة C , لن نحتاج الى العنوان , في المقابل سوف نقوم فقط بالتَعريف على اسماء المتغيرات للمترجم compiler , هو من سوف يقوم بعملية conversion “تحويل” بالنيابة عنا نحن ليسهل لنا العمل .
اعطاء اسامي للمتغيرات
في لغة البرمجة C كل متغير يجب ان يحتوي على اسم , بالنسبة الى المتغير الذي يكشف لنا عدد المحاولات في اللعبة ( نعم المثال السابق دائما رقم 5 … عليك ان تلعب لعبة ماريو و الا لن تستطبع البرمجة ابدا 👀 ) , سوف تُريد تسميتها مثلا عدد المحاولات .
هنا نصل الى الحدود المفروضة في التسميات و هي كالتالي :
– لا يمكن استعمال الا ارقام و حروف (لاتينية) الكبيرة و الصغيرة ( Lowercase, Uppercase ) مثل abcABC012 .
– اسم المتغير يجب ان يبداء بحرف .
– الفراغات بين الاحرف و الارقام ممنوعة , في مكان الفراغ يمكن استعمال هذا الشكل _ ( underscore ) , هذا هو الرمز الوحيد المسموح بعد الارقام و الحروف .
– لا يمكن استعمال هذا النوع من الاحرف éàê , التي تكون بها اشكال خاصة تستعمل في لغات مثل الفرنسية و ما شبه .
عليك بمعرفة ان في البرمجة بلغة C , يوجد فرق بين الاحرف الكبيرة مثل ABCD و الصغيرة abcd , هي لغة تحترم اختلاف الحركات , و مثل هذا المتغيرات width و WIDTH او حتى WidHt , هي 3 متغيرات مختلفة تماما عن بعضها البعض في لغة البرمجة C , حتى و ان كانت بالنسبة لنا هي تعني نفس الشئ ( width العَرض ) .
هذه امثلة عن اسماء متغيرات صحيحة للشرح فقط : NumberOFlives , firstname , phone_number , PhoneNumber
انواع المتغيرات
45 ;
398 ;
و توجد ايضا أرقام او اعداد عشرية ( الارقام هي من 0 الى 9 و الاعداد هي من 11 الى مالا نهاية ) , العشرية هي التي تحتوي على فواصل مثل :
75,909 ;
1,7741 ;
9810,7 ;
مثل ما هو موجود في الاعداد و الارقام الصحيحة , نجد نفس الشئ في السلبية التي تكون مسبوقة بالرمز سالب – مثل :
-87 ;
-916;
و العشرية منها مثل :
-76,9 ;
الكمبيوتر بحاجة الى مساعدتك 😪 , حين تطلب منه تخزين عدد يتوجب عليك اطلاعه على اي نوع يتعلق به الامر , لا لانه لا يمكنه التعرف عليه لوحده , لكن انت تساعده كثيرا على تنضيم نفسه , و ان لا تجعله يستعمل الذاكرة في اشياء تافهة .
مثل ما قلنا توجد العديد من اصناف المتغيرات , و سوف نضيف الى قاموسينا نوع مميز في هذا الشرح و السهل للحفظ و هو unsigned , ميزته هي انه يقوم بتخزين الاعداد الموجبة , قد تعتبرها نقصان لكن سعت تخزينه اكبر حين تستعمله , لتستعمل هذا الصنف “type” تكتبه في الاول لتكون النتيجة كالتالي :
نعم نوع unsigned لا يمكنه تخزين الاعداد السلبية , لكنه يتمتع بسعة تقريبا الضعف من التي عرضنها اعلاه مثل signed char تتوقف في 127 , بينما unsigned char تصل الى 255 .
خلاصة :
علينا فقط التمييز بين الاعداد الصحيحة ( الموجبة ) و الاعداد العشرية ( العائمة) , سوف نستعمل غالبا int للاعداد الصحيحة , و double للعائمة , هذا في اغلب الاحيان و ليست قاعدة , الامر يتعلق بالقيمة .
بهذه الطريقة سوف يتم انشاء 3 متغيرات int باسماء numberOfLives و level و ageOfThePlayer
– الى هنا نكون قد وصلنا الى نهاية الجزء الاول من الدرس الخامس , اتمنى ان ينال اعجابكم و لا تتردوا في المشاركة بالتعليقات لدعمي معنويا في مواصلة الدورة .