Yazılımda, bir kod bloğu bir kontrol yapısının veya fonksiyonunun vücududur.Bir değişkenin veya işlevin alanı bir değere erişebilen kod blokudur ve bunlar küresel veya yerel olabilir.Tüm bloklar küresel değişkenlere ve işlevlere erişebilir.Bir blok, ebeveyn blokundaki yerel değişkenlere ve işlevlere erişebilir, ancak çocuk bloklarından hiçbirine erişemez.
Değişkenler ve işlevler varsayılan olarak küresel ölçekte olsa da, yerel ölçekte ilan etmek neredeyse daima daha iyidir, çünkü Luau küresel değişkenlere ve işlevlere kıyasla yerel değişkenlere ve işlevlere daha hızlı erişir.Bir değişken veya işlev yerel ölçek vermek için, onu ilan ettiğinizde adının önüne anahtar kelime local koyun.
Scriptler diğer scriptlerdeki küresel ve yerel değişkenlere veya işlevlere erişemez.Değerleri ve işlevleri yazılımlar arasında paylaşmak istiyorsanız, ModuleScripts kullanın.
local helloWorld = 'Hello World!'
local function printHelloWorld()
print(helloWorld)
end
printHelloWorld() -- Hello World!

- Blok B yerel değişkenlere erişebilir blok A'da.
- Blok C yerel değişkenlere ve işlevlere bloklar A ve B'de erişebilir.
- A Blok B veya C bloklarındaki yerel değişkenlere ve işlevlere erişemez .
- Blok B yerel değişkenlere erişemez blok C'de.
Küresel ölçek
Küresel bir değişken veya işlev ilan ettikten sonra, aynı senaryo scriptindeki herhangi bir kod bloku ona erişebilir.Değişkenler ve işlevler, local anahtar kelimesi ile onları belirtmediğiniz sürece küresel ölçekte vardır.
Aşağıdaki kodda, testVar yerel testFunc() işlevi içinde küresel ölçek sahibidir.Luau çağırdığında , değeri atar.The testVar global ölçüye sahiptir, bu nedenle print() dışındaki testFunc() fonksiyonu ona erişebilir ve 64 basabilir.
Example of global functions and variables
local function testFunc() -- yerel ölçek
testVar = 64 -- küresel ölçek
end
testFunc()
print(testVar) -- 64
Aşağıdaki kodda, küresel değişken 'de başlar, her döngüde ile artar ve sonra 4'lük bir final değerle yeniden basılır.
x = 0 -- Küresel değişken "x"for i = 1, 4 dox += 1print("Global 'x' = " .. x)endprint("Global 'x' = " .. x)--[[ Sonuç çıkışı:Global 'x' = 1Global 'x' = 2Global 'x' = 3Global 'x' = 4Global 'x' = 4]]
Küresel değişkenler ve işlevler ilan etmek daha kolaydır, çünkü çok fazla yazmanıza gerek yoktur, ancak küresel değişkenler ve işlevler yerel olanlara kıyasla aşağıdaki dezavantajlara sahiptir:
- Luau, bir hash aramasıyla küresel değişkenlere ve işlevlere erişir, bu nedenle sözleşme imzalamaaçısından kullanmak pahalıdır.Zaman kritik bir döngüde küresel bir değişken kullanmak, aynı döngüde yerel bir değişken kullanmaktan daha yavaş çalışmasını sağlayabilir% 10'dan fazla.
- Luau, yerel değişkenlerin kapsamı sona erdiğinde bunlardan kurtulur ve hafıza kullanımını azaltır.
Yerel ölçek
Luau yalnızca ilan ettiğiniz kod bloğunda yerel bir değişken veya işlevlere erişebilir.Yerel ölçekle bir değişken oluşturmak, değerinin ne zaman ve nerede değişeceği konusunda daha sıkı bir kontrol sağlar.
Aşağıdaki kodda, testFunc() fonksiyonu ve testVar değişken yerel ölçüye sahiptir.Sadece testFunc() içindeki kod erişebilir testVar değişken.testVar değişkeninin testFunc() dışında bir değeri yok, bu yüzden print(testVar) içinde çağrılan testFunc() değeri testVar basılır, ancak print(testVar) dışında çağrılan testFunc() değeri nil basılır.
local function testFunc() -- yerel ölçek
local testVar = 64 -- yerel ölçek
print(testVar) -- 64
end
testFunc()
print(testVar) -- nil
Aşağıdaki kodda, yerel değişken x 1. satırda değer 0 alır.Luau döngüsü aracılığıyla yeniden döndüğünde, farklı bir yerel değişkenin değeri vardır.Sonra, Luau başlangıç değişkenini x değiştirilmeden basar 0 .
local x = 0 -- Yerel değişken "x"for i = 1, 4 dolocal x = 1 -- Farklı değişken "x", bu "for" döngüsüne yerelprint("Loop 'x' = " .. x)endprint("Initial 'x' = " .. x)--[[ Sonuç çıkışı:Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Loop 'x' = 1Initial 'x' = 0]]
Kapatma
Yerel bir değişken ilan ettikten ve atadıktan sonra, yerel değişkenin kapsam seviyesinde ve yerel değişkenin kapsamını aynı kapsama sahip olan işlevler okuyabilirsiniz.Bu teknik yakalama olarak bilinir.
Aşağıdaki kodda, işlev f yerel değişkeni yakalar x .Değişken x ın f() içindeki değeri bir üst değerdir .
local x = 5
local function f()
print(x)
end
f() -- 5
print(x) -- 5
Gölge
Yerel bir değişken ilan ettikten ve atadıktan sonra, onu yelpaze seviyesinde ve alt seviye yelpaze seviyelerinde okuyabilirsiniz.Bir alt düzeyde değişkeni yeniden tanımlayıp yeniden atarsanız, aynı adı taşıyan ancak en önceki atamadan farklı bir değere sahip yeni bir yerel değişken oluşturursunuz.Yeni yerel değişken, önceki atamadan yerel değişkeni etkilemez.Bu teknik, gölgeleme olarak bilinir, bir değerin yeniden kullanılması olmadan bir değişkenin adını yeniden kullanmanıza yardımcı olur.
Aşağıdaki kodda, Luau değişkeni x gölgelemektedir. Değişken x ın f() içindeki değeri bir gölge değişkendir.
local x = 5
local function f()
local x = 7
print(x)
end
f() -- 7
print(x) -- 5
Ayrıca bir değer atamadan yerel bir değişkeni yeniden tanımlayabilirsiniz, böylece değişkeni hem kapsama seviyesinde hem de alt seviye kapsama seviyelerinde yeniden atayabilirsiniz.Bir değere atanmadan yerel bir değişkeni yeniden tanımlamak, değerini nil olarak ayarlar.
Aşağıdaki kodda, Luau yerel değişkeni fruitName işlevinde gölgeliyor getFruitByColor() .İşlev yeni bir gölge değişkeni olarak fruitName yeniden tanımlar ve değerini nil olarak ayarlar.İşlevin bir alt seviyevardır, bir döngüsü, 'a bir değer atayan, bir döngüsü.for döngüsünden sonra, işlev fruitName gölge değişkenini geri döndürür.Tüm işlev boyunca, fruitName başlangıç fruitName yerel değişkenin üzerine yazmadığı aynı yerel değişkendir.
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
(Türkçe)
Lemon
(İngilizce)
print(fruit .. ", not " .. fruitName) -- Lemon, not Chocolate