النطاق والكتل البرمجية
جزء من قسم Fundamentals في رحلة Lua على Coddy — الدرس 86 من 90.
في لغة Lua، يمكنك إنشاء نطاقات (scopes) جديدة في أي مكان في الكود الخاص بك باستخدام كتل do...end. تسمح لك هذه الكتل بالتحكم بدقة في مكان الوصول إلى متغيراتك المحلية، مما يمنحك تحكماً دقيقاً في نطاق المتغيرات.
إليك كيفية إنشاء نطاق جديد باستخدام كتلة do...end:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- هذا يعمل
print(innerVar) -- هذا يعمل أيضاً
end
print(outerVar) -- هذا يعمل
print(innerVar) -- سيؤدي هذا إلى حدوث خطأ!الجانب القوي في النطاق (scope) هو أنه يمكنك الحصول على متغيرات محلية بنفس الاسم في كتل برمجية مختلفة، وتظل منفصلة تماماً عن بعضها البعض:
local name = "Alice"
do
local name = "Bob" -- متغير مختلف!
print(name) -- يطبع "Bob"
end
print(name) -- يطبع "Alice"تنشئ كل كتلة do...end بيئتها المعزولة الخاصة للمتغيرات المحلية. لا يمكن للمتغيرات المصرح عنها داخل الكتلة الهروب إلى النطاق الخارجي، بينما يمكن الوصول إلى المتغيرات من النطاقات الخارجية من داخل الكتل الداخلية.
التحدي
سهلقم بإنشاء كتل do...end متداخلة لتوضيح كيف تظل المتغيرات المحلية التي تحمل نفس الاسم منفصلة تمامًا في النطاقات المختلفة.
أولاً، قم بإنشاء متغير محلي باسم playerLevel بالقيمة 10 في النطاق الخارجي وقم بطباعته.
ثم قم بإنشاء كتلة do...end وبداخلها:
- صرح عن متغير محلي جديد يسمى أيضًا
playerLevelبالقيمة25 - اطبع
playerLevelالداخلي هذا
بعد انتهاء الكتلة الداخلية، اطبع playerLevel الخارجي مرة أخرى لتوضيح أنه ظل دون تغيير.
يوضح هذا أن المتغيرات المحلية ذات الأسماء المتطابقة في نطاقات مختلفة مستقلة تمامًا - فالمتغير الداخلي لا يؤثر على المتغير الخارجي.
ورقة مرجعية
أنشئ نطاقات (scopes) جديدة في أي مكان في الكود الخاص بك باستخدام كتل do...end للتحكم في نطاق المتغيرات:
local outerVar = "I'm outside"
do
local innerVar = "I'm inside"
print(outerVar) -- هذا يعمل
print(innerVar) -- هذا يعمل أيضاً
end
print(outerVar) -- هذا يعمل
print(innerVar) -- سيؤدي هذا إلى حدوث خطأ!تظل المتغيرات المحلية التي تحمل الاسم نفسه في كتل مختلفة منفصلة تماماً:
local name = "Alice"
do
local name = "Bob" -- متغير مختلف!
print(name) -- يطبع "Bob"
end
print(name) -- يطبع "Alice"لا يمكن للمتغيرات المعلن عنها داخل كتلة الهروب إلى النطاق الخارجي، بينما يمكن الوصول إلى المتغيرات من النطاقات الخارجية من داخل الكتل الداخلية.
جرّب بنفسك
-- مهام: اكتب الكود الخاص بك هنايتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات 2: العمليات العلائقية والمنطقية
معاملات التساويالمعاملات العلائقيةالمعامل 'and'المعامل 'or'المعامل 'not'التقييم قصير الدائرةقيم Truthy و Falsyمراجعة - المنطق البسيط10الجداول الجزء 1: نمط القائمة
ما هو الجدول؟إنشاء جدولالوصول إلى العناصر عبر الفهرستعديل العناصر عبر الفهرسمعامل الطول '#'table.insert()table.remove()ملخص - إدارة أعضاء الفريق13مشروع: متجر جرعات بسيط
إعداد المشروعإضافة جرعة2المتغيرات وأنواع البيانات
ما هو المتغير؟الأرقامالسلاسل النصيةالقيم المنطقيةالقيمة 'nil'الدالة type()قواعد التسميةمراجعة - ملف الشخصية5الإخراج الأساسي
طباعة القيم الحرفيةطباعة المتغيراتطباعة قيم متعددةدمج النصوص والمتغيراتدالة tostring()الإدخال (Input)التحويل (Cast)مراجعة - تقرير الحالةمراجعة - حتى 1208أساسيات معالجة النصوص
string.len()string.upper و string.lowerstring.sub()string.rep()string.find()مراجعة - تنسيق اسم المستخدم11الجداول 2: بأسلوب القاموس
أزواج (مفتاح-قيمة)إنشاء جداول بأسلوب القاموسالوصول - تدوين الأقواسالوصول بتدوين النقطةإضافة وتعديل الأزواجإزالة الأزواج باستخدام nilمراجعة - خصائص العناصر14نطاق المتغيرات
المتغيرات العامةالمتغيرات المحليةلماذا نستخدم المتغيرات المحلية؟النطاق والكتل البرمجيةمراجعة - لغز النطاق3المعاملات 1: العمليات الحسابية والدمج
المعاملات الحسابيةمعامل باقي القسمةمعامل الأسدمج النصوصأولوية المعاملاتملخص - حسابات بسيطة6مشروع: عرض إحصائيات الشخصية
رسالة ترحيبتعريف إحصائيات الشخصية9أساسيات الدوال
تعريف دالةاستدعاء دالةدوال مع معاملاتدوال بمعاملات متعددةجملة 'return'مراجعة - حاسبة المساحة12أساسيات الحلقات التكرارية
حلقة whileحلقة repeat-untilحلقة for الرقميةحلقة for مع خطوةجملة 'break'مراجعة - العد التنازلي