Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

النطاق والكتل البرمجية

جزء من قسم 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 بيئتها المعزولة الخاصة للمتغيرات المحلية. لا يمكن للمتغيرات المصرح عنها داخل الكتلة الهروب إلى النطاق الخارجي، بينما يمكن الوصول إلى المتغيرات من النطاقات الخارجية من داخل الكتل الداخلية.

challenge icon

التحدي

سهل

قم بإنشاء كتل 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"

لا يمكن للمتغيرات المعلن عنها داخل كتلة الهروب إلى النطاق الخارجي، بينما يمكن الوصول إلى المتغيرات من النطاقات الخارجية من داخل الكتل الداخلية.

جرّب بنفسك

-- مهام: اكتب الكود الخاص بك هنا
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals