النطاق

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

في البرمجة النصية، كتلة الشيفرة هي جسم هيكل التحكم أو الدالة. نطاق المتغير أو الدالة هو كتلة الشيفرة التي يمكنها الوصول إليها، ويمكن أن تكون عالمية أو محلية. يمكن لجميع الكتل الوصول إلى المتغيرات والدوال العالمية. يمكن لكتلة الوصول إلى المتغيرات والدوال المحلية في كتلتها الأصلية، ولكن ليس في أي من كتلها الفرعية.

تتمتع المتغيرات والدوال بنطاق عالمي بشكل افتراضي، ولكن من الأفضل دائمًا إعلانها بنطاق محلي لأن Luau يصل إلى المتغيرات والدوال المحلية بشكل أسرع من العالمية. لإعطاء متغير أو دالة نطاقًا محليًا، ضع الكلمة الرئيسية local قبل اسمها عند إعلانها.

لا يمكن للبرامج النصية الوصول إلى المتغيرات أو الدوال العالمية والمحلية في برامج نصية أخرى. إذا كنت ترغب في مشاركة القيم والدوال بين البرامج النصية، استخدم ModuleScripts.

local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!
  • كتلة B يمكنها الوصول إلى المتغير المحلي في كتلة A.
  • كتلة C يمكنها الوصول إلى المتغيرات والدوال المحلية في الكتل A و B.
  • كتلة A لا يمكنها الوصول إلى المتغيرات والدوال المحلية في الكتل B أو C.
  • كتلة B لا يمكنها الوصول إلى المتغير المحلي في كتلة C.

النطاق العالمي

بعد أن تعلن عن متغير أو دالة عالمية، يمكن لأي كتلة شيفرة في نفس البرنامج النصي الوصول إليها. تتمتع المتغيرات والدوال بنطاق عالمي ما لم تعلن عنها باستخدام الكلمة الرئيسية local.

في الشيفرة التالية، يتمتع testVar بنطاق عالمي داخل الدالة المحلية testFunc(). عندما تستدعي Luau الدالة testFunc(), تعين testVar القيمة 64. يتمتع testVar بنطاق عالمي، لذا يمكن لدالة print() خارج testFunc() الوصول إليها وطباعة 64.

مثال على الدوال والمتغيرات العالمية
local function testFunc() -- نطاق محلي
testVar = 64 -- نطاق عالمي
end
testFunc()
print(testVar) -- 64

في الشيفرة التالية، يبدأ المتغير العالمي x عند 0، ويزداد بمقدار 1 مع كل تكرار من حلقة for، ويطبع مرة أخرى بعد ذلك بقيمة نهائية تبلغ 4.

x = 0 -- المتغير العالمي "x"
for i = 1, 4 do
x += 1
print("العالمي 'x' = " .. x)
end
print("العالمي 'x' = " .. x)
--[[ الناتج الناتج:
العالمي 'x' = 1
العالمي 'x' = 2
العالمي 'x' = 3
العالمي 'x' = 4
العالمي 'x' = 4
]]

من الأسهل إعلان المتغيرات والدوال العالمية لأنك لا تحتاج إلى كتابة الكثير، ولكن المتغيرات والدوال العالمية لها العيوب التالية مقارنة بالمحلية:

  • تصل Luau إلى المتغيرات والدوال العالمية من خلال بحث تجزئة، لذا فإن استخدامها مكلف من حيث الأداء. يمكن أن يجعل استخدام متغير عالمي في حلقة حرجة زمنياً أداؤها أبطأ بأكثر من 10% مقارنة باستخدام متغير محلي في نفس الحلقة.
  • تتخلص Luau من المتغيرات المحلية بعد انتهاء نطاقها، مما يقلل من استخدام الذاكرة.
  • يمكنك الوصول إلى المتغيرات والدوال العالمية ضمن نفس البرنامج النصي، ولكن ليس بين برامج نصية متعددة. لذلك، فإن المتغير أو الدالة العالمية لا توفر أي فائدة مقارنة بنظير محلي في النطاق، أو upvalue، أو shadow.

النطاق المحلي

يمكن لـ Luau الوصول فقط إلى متغير أو دالة محلية في كتلة الشيفرة حيث تعلن عنها. يمنحك إنشاء متغير بنطاق محلي تحكمًا أكبر في متى وأين تتغير قيمته.

في الشيفرة التالية، تتمتع الدالة testFunc() والمتغير testVar بنطاق محلي. يمكن فقط للشيفرة داخل testFunc() الوصول إلى المتغير testVar. لا يحتوي المتغير testVar على قيمة خارج testFunc()، لذا فإن استدعاء print(testVar) داخل testFunc() يطبع قيمة testVar، ولكن استدعاء print(testVar) خارج testFunc() يطبع nil.

local function testFunc() -- نطاق محلي
local testVar = 64 -- نطاق محلي
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil

في الشيفرة التالية، يحتوي المتغير المحلي x على القيمة 0 في السطر 1. بينما تتكرر Luau عبر حلقة for، يحتوي متغير محلي مختلف x على القيمة 1. ثم، تطبع Luau المتغير الأولي x بقيمة غير متغيرة 0.

local x = 0 -- المتغير المحلي "x"
for i = 1, 4 do
local x = 1 -- متغير مختلف "x"، محلي لهذه "for" الحلقة
print("حلقة 'x' = " .. x)
end
print("الأولي 'x' = " .. x)
--[[ الناتج الناتج:
حلقة 'x' = 1
حلقة 'x' = 1
حلقة 'x' = 1
حلقة 'x' = 1
الأولي 'x' = 0
]]

تتبع المتغيرات والدوال const نفس قواعد النطاق مثل المتغيرات المحلية. يمكنك إعلانها في أي كتلة، بما في ذلك داخل دالة أخرى. لمزيد من المعلومات حول const، راجع متغيرات const.

الالتقاط

بعد أن تعلن وتعين متغيرًا محليًا، يمكنك قراءته في مستوى نطاقه والدوال التي يكون نطاقها محاطًا بنفس النطاق الذي يحتوي على المتغير المحلي. تُعرف هذه التقنية باسم الالتقاط.

في الشيفرة التالية، تقوم الدالة f بالتقاط المتغير المحلي x. المتغير x في f() هو upvalue.

local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5

الظل

بعد أن تعلن وتعين متغيرًا محليًا، يمكنك قراءته في مستوى نطاقه ومستويات النطاق الفرعية. إذا قمت بإعادة إعلان وإعادة تعيين المتغير في مستوى نطاق فرعي، فإنك تنشئ متغيرًا محليًا جديدًا بنفس الاسم ولكن بقيمة مختلفة عن آخر تعيين. لا يؤثر المتغير المحلي الجديد على المتغير المحلي من التعيين السابق. تُعرف هذه التقنية باسم الظل، وتساعدك على إعادة استخدام اسم متغير دون إعادة استخدام قيمته.

في الشيفرة التالية، تقوم Luau بظل المتغير x. المتغير x في f() هو متغير ظل.

local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5

يمكنك أيضًا إعادة إعلان متغير محلي دون تعيين قيمة له حتى تتمكن من إعادة تعيين المتغير في كل من مستوى نطاقه ومستويات النطاق الفرعية. تعيين متغير محلي بدون تعيين قيمة له يضبط قيمته إلى nil.

في الشيفرة التالية، تقوم Luau بظل المتغير المحلي fruitName في الدالة getFruitByColor(). تعيد الدالة إعلان fruitName كمتغير ظل جديد وتضبط قيمته إلى nil. تحتوي الدالة على مستوى نطاق فرعي، وهو حلقة for، التي تعين قيمة لـ fruitName. بعد حلقة for، تعيد الدالة متغير ظل fruitName. طوال الدالة بأكملها، يكون fruitName هو نفس المتغير المحلي الذي لا يكتب فوق المتغير المحلي الأولي fruitName.

local fruitName = "Chocolate"
local fruitTable = {
Lemon = "Yellow",
Apple = "Red",
Orange = "Orange"
}
local function getFruitByColor(color)
local fruitName
for key, value in fruitTable do
if value == color then
fruitName = key
end
end
return fruitName
end
local fruit = getFruitByColor("Yellow")
print(fruit) -- Lemon
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.