Kontrol yapıları Luau kodu işleme akışını yöneten ifadelerdir. Vardır dört ana tip kontrol yapısı:
- Bir if then else if statementı, belirli bir koşul true olduğunda sadece kodu çalıştırır. Kod çalıştırma tekrarlanmaz.
- A while loop kodu sadece belirli bir koşul true olduğunda çalıştırır ve koşul true olduğu sürece tekrarlar.
- Bir peat loop kodu yürütür ve koşul true ise tekrarlar.
- Bir for loop kodu, belirlenen girdilere bağlı olarak bir set sayıda kez çalıştırır.
if ifadeleri, while döngüleri ve repeat döngüleri için koşul, herhangi bir Luau ifadesi veya değeri olabilir. Eğer bir ifade 1> force1> veya 4>
Eğer Statistikler
Ana if ifadesi durumunu test eder. Eğer durum doğruysa, Luau kodu then ve end arasında çalışır.
Eğer if koşulu sahteysa, ek koşullar için else ifadesini kullanabilirsiniz. 1> else1> ve 4> else 4> koşullarının tüm
Bir if , elseif ve else koşullarının bir zinciri içinde, Luau koşulları üstten test eder, ilk 1> true1> koşulunu durdurur ve sonraki 8> else8> kodunu çalıştırır.
if 2 + 2 == 5 thenprint("Two plus two is five") -- Kondisyon sahte olduğu için印刷 etmezelseif 2 + 3 == 5 thenprint("Two plus three is five") -- İki plus üç = beşelseprint("All conditions failed") -- Önceki koşul doğru olduğu için yazdırmazend
Loop'lar
A while — do bir çözgü değerlendirmesi, belirli bir koşulun doğru veya yanlış olduğunu değerlendirir. Eğer koşul false veya 1> nil1> ise, çözgü değerlendirmesi sona erer ve
local timeRemaining = 10while timeRemaining > 0 doprint("Seconds remaining: " .. timeRemaining)task.wait(1)timeRemaining -= 1endprint("Timer reached zero!")--[[ Sonuç çıkışı:Seconds remaining: 10Seconds remaining: 9Seconds remaining: 8Seconds remaining: 7Seconds remaining: 6Seconds remaining: 5Seconds remaining: 4Seconds remaining: 3Seconds remaining: 2Seconds remaining: 1Timer reached zero!]]
Sonsuz Döngüler
while — do 循环を yazmak için koşul olarak true'i ayarlarak sonsuz oyun 循环leri yazabilirsiniz.
while true doprint("Looping...")task.wait(0.5)end--[[ Sonuç çıkışı:Looping...Looping...Looping...Looping......]]
Geri Sayımları Tekrarla
The repeat — until loop repeats until a condition is true. The conditional test evaluates after the code block runs, so the code block always runs at least once. Unlike other languages, the Luau scope of a local variable declared inside a 1>peat1> — 4> hasta
local currentGoblinCount = 18-- oyunmaksimum 25 goblin oluştururrepeatspawnGoblin()currentGoblinCount += 1print("Current goblin count: " .. currentGoblinCount)until currentGoblinCount == 25print("Goblins repopulated!")--[[ Sonuç çıkışı:Current goblin count: 19Current goblin count: 20Current goblin count: 21Current goblin count: 22Current goblin count: 23Current goblin count: 24Current goblin count: 25Goblins repopulated!]]
Looplar için
A for loop executes code a set number of times, either based on a sayısal sayıcı or the number of koleksiyon içindeki eşyaların sayısı.
Döngüler için Sayı
Bir for — do loop, karşı teklif'ı kullanarak döngüyü yürütmenin kaç kere yapılacağını belirler. Döngü, bir başlangıç değeri, son değeri ve seçici artışı ile ilan edilmiştir.
Luau, başlangıç değerine eşit sayıda iletkeni yürütür, for döngüsündeki kod blokunu çalıştırır ve ardından karşı teklifartırıcısını ekler. Eğer artırıcı olumluysa, sayacın son değerine eşit veya daha büyük olması için işlem tekrarlanır. Eğer artırı
Opcional artış 1 olarak varsayılır. Bir bütün sayı olması gerekmez.
for counter = 1, 3 doprint(counter)end--[[ Sonuç çıkışı:123]]for counter = 1, 6, 2 doprint(counter)end--[[ Sonuç çıkışı:135]]for counter = 2, 0, -0.5 doprint(counter)end--[[ Sonuç çıkışı:21.510.50]]
Genel Loop için
Genel for for dizi, bir koleksiyonun bir dizi değil, öğelerin üzerinde itelenir. Genel for for dizi ile, koleksiyon içindeki her bir öğenin kodunu yürütmenizi sağlar ve kodu kolayca kullanabilirsiniz.
For döngüleri için bir işlev veya bir itici gerekir, böylece farklı türlerdeki koleksiyonlar üzerinde iterecek şekilde döngü yapabilirsiniz. Global ipairs() , dizinler için bir itici içerir ve global pairs() , döngüler için bir işlev içerir. Library.
Genelleştirilmiş Birleştirme
Luau'da, in kelimesini kullanarak tabloyu doğrudan tablo üzerinde tekrar edebilirsiniz, bir itici işlevi kullanarak değil :
for i, v in {1, 2, 3, 4, 5} doprint(i, v)end
Genelized iteration ayrıca özelleştirilmiş bir itici işlevi oluşturmak için __iter metodunu kullanır. Bu örnek, son elemanından ilkine doğru bir matris üzerinde itilir:
local myTable = {1, 2, 3, 4, 5}
myMetatable = {
__iter = function(t)
local i = #t + 1
return function()
i -= 1
if i > 0 then
return i, t[i]
end
end
end,
}
setmetatable(myTable, myMetatable)
for i, v in myTable do
print(i, v)
end
--[[ Sonuç çıkışı:
5 5
4 4
3 3
2 2
1 1
]]
Matrisler
The ipairs() function returns an iterator that iterates through numerical indexes in a table and returns an index ve value for each element. This makes it appropriate for arrays, where all indexes are numeric.
local array = {"a", "b", "c", "d", "e"}for index, value in ipairs(array) doprint(index, value)end--[[ Sonuç çıkışı:1 a2 b3 c4 d5 e]]
Sözlükler
The pairs() function returns an iterator that iterates through all indexes (including numerical indexes) in a table and returns a key and value for each entry in the dictionary. The order of traversing elements in a dictionary table is arbitrary. This makes it appropriate for iterating over dictionaries, where items are stored out of order with non-numeric indexes.
local dictionary = {[1] = "a",["Hello"] = "b",[5] = "c",[true] = "d",["World"] = "f",[false] = "e"}for key, value in pairs(dictionary) doprint(key, value)end--[[ Sonuç çıkışı:Hello btrue dfalse eWorld f5 c1 a]]
Kontrol Etme Kelimeleri
Kırıcı Çemberler
Bir döngüyü bitirmek için, break kelimesini kullanın. Aşağıdaki kod örneği, sonsuz while — do döngüsünü gösterir.
local secondsElapsed = 0local timeout = 5while true dotask.wait(1)secondsElapsed += 1print("Seconds elapsed:", secondsElapsed)if secondsElapsed == timeout thenbreakendendprint("Five seconds elapsed. Time to move on!")--[[ Sonuç çıkışı:12345Five seconds elapsed. Time to move on!]]
Devam eden döngüler
Bir döngüyü tekrar iterecek ve yeniden başlatmak için, continue kelimesini kullanın. Bir for döngüsü, sayacı iterecek; while ve 2> peat2> — 5>
local function GetChildrenOfClass(parent: Instance, className: string): {Instance}
local children = {}
for _, child in parent:GetChildren() do
if child.ClassName ~= className then continue end -- Döngüyü itere
table.insert(children, child)
end
return children
end