النطاق

*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("Global 'x' = " .. x)
end
print("Global 'x' = " .. x)
--[[ الناتج الناتج:
Global 'x' = 1
Global 'x' = 2
Global 'x' = 3
Global 'x' = 4
Global 'x' = 4
]]

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

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

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

يمكن للوو (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("Loop 'x' = " .. x)
end
print("Initial 'x' = " .. x)
--[[ الناتج الناتج:
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Loop 'x' = 1
Initial 'x' = 0
]]

الالتقاط

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

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


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. بعد الحلقة، تعيد الدالة متغير 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 وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.