الثوابت والرموز
في الدرس السابق تعلمنا عن المتغيرات التي يمكن تغيير قيمتها. لكن ماذا لو أردنا قيمة لا تتغير أبداً؟ وماذا عن القيم التي نستخدمها كـ"علامات" أو "مفاتيح"؟ هنا يأتي دور الثوابت (Constants) والرموز (Symbols)!
الثوابت (Constants)
الثابت هو قيمة لا يُفترض تغييرها بعد تعريفها. في روبي، نُعرّف الثوابت بكتابة اسمها بحروف كبيرة (UPPERCASE):
الناتج:
لماذا نستخدم الثوابت؟
- قيم ثابتة رياضياًّ: مثل π (باي) أو سرعة الضوء
- إعدادات التطبيق: مثل اسم التطبيق أو الإصدار
- حدود قصوى: مثل الحد الأقصى للمستخدمين أو حجم الملف
- قيم مرجعية: مثل أسماء الأشهر أو أيام الأسبوع
الناتج:
تحذير عند تغيير الثوابت
روبي تُحذّرك إذا حاولت تغيير قيمة الثابت، لكنها لا تمنعك تماماً:
الناتج:
ستظهر رسالة تحذير: warning: already initialized constant MAX_SCORE
نصيحة: تعامل مع الثوابت كقيم لا يجب تغييرها أبداً، حتى لو سمحت روبي بذلك تقنياًّ.
اصطلاحات تسمية الثوابت
الرموز (Symbols)
الرمز (Symbol) هو نوع خاص من البيانات في روبي. يبدأ بنقطتين : ويُستخدم كـ"علامة" أو "اسم" ثابت:
الناتج:
الفرق بين الرموز والنصوص
قد تتساءل: ما الفرق بين :active و "active"؟ هناك فروقات مهمة:
الناتج:
لاحظ أن:
- النصان
"أحمد"لهماobject_idمختلف (كائنان منفصلان) - الرمزان
:activeلهما نفسobject_id(نفس الكائن!)
كفاءة الذاكرة
الرموز أكثر كفاءة في استخدام الذاكرة لأن روبي تُنشئ الرمز مرة واحدة فقط:
متى نستخدم الرموز؟
- مفاتيح القواميس (Hashes):
الناتج:
- حالات ثابتة:
الناتج:
- أسماء الدوال والخصائص:
الناتج:
تحويل بين النصوص والرموز
يمكنك التحويل بين النصوص والرموز بسهولة:
الناتج:
مقارنة الثوابت بالرموز
| الميزة | الثوابت (Constants) | الرموز (Symbols) |
|---|---|---|
| الصياغة | MAX_VALUE = 100 | :max_value |
| الاستخدام | تخزين قيم ثابتة | علامات ومفاتيح |
| التغيير | تحذير عند التغيير | لا يمكن تغييرها |
| النوع | أي نوع (رقم، نص، إلخ) | Symbol دائماً |
| الذاكرة | حسب نوع القيمة | كفاءة عالية |
مثال عملي: إعدادات تطبيق
الناتج:
نصائح مهمة
- استخدم الثوابت للقيم التي لا تتغير طوال تشغيل البرنامج
- استخدم الرموز بدلاً من النصوص عندما تحتاج لـ"علامات" ثابتة
- الرموز أسرع في المقارنة من النصوص
- الثوابت يجب أن تبدأ بحرف كبير، والاصطلاح هو SCREAMING_SNAKE_CASE
- الرموز لا يمكن تغييرها - هي ثابتة بطبيعتها
تمرين: الثوابت والرموز
حان وقت التطبيق! في محرر الشيفرة على اليسار:
المطلوب:
- عرّف ثابتاً باسم
COUNTRYيحتوي على "مصر" - عرّف ثابتاً باسم
POPULATIONيحتوي على 100000000 - عرّف متغيراً باسم
statusيحتوي على الرمز:active - عرّف متغيراً باسم
languageيحتوي على الرمز:arabic - اطبع كل قيمة باستخدام puts
الناتج المتوقع:
تلميح: الثوابت تُكتب بحروف كبيرة، والرموز تبدأ بنقطتين
:!
تذكّر: الثوابت للقيم التي لا تتغير، والرموز للعلامات والمفاتيح الثابتة. كلاهما يجعل شيفرتك أوضح وأكثر كفاءة!