Genel for ve break
pairs/ipairs ile genel for kullanın ve break ile döngü akışını denetleyin.
Genel for ve break, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Genel for Protokolü
Lua'nın genel for döngüsü bir yineleyici işlevi ile çalışır. Söz dizimi for vars in iter_func, state, init do biçimindedir. Lua her yinelemede iter_func(state, lastVar) çağrısını yapar ve dönen değerleri vars değişkenlerine atar. İlk dönüş değeri nil olduğunda döngü durur.
-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil) -- first entry
while key ~= nil do
print(key, val)
key, val = next(t, key) -- advance
endTüm Anahtarlar için pairs()
pairs(t), bir tablodaki dizge anahtarları, tam sayı anahtarları ve karma anahtarlar dahil tüm anahtar-değer çiftlerini dolaşan bir yineleyici döndürür. Tam sayı olmayan anahtarların yineleme sırası belirtilmemiştir (karma tablo sırası). Dizinin ve karma tablonun bölümleri birlikte dahil edilir.
local config = {
host = "localhost",
port = 8080,
debug = true,
[1] = "first",
}
for key, value in pairs(config) do
print(key, value)
end
-- Prints all 4 entries in any orderDizi Anahtarları için ipairs()
ipairs(t), 1'den başlayan tam sayı anahtarları üzerinde yineleme yapar ve ilk nil değerinde durur. Güvenli ve öngörülebilirdir; sırayı korur. Sıranın önemli olduğu ve ilk boşlukta durmak istediğiniz dizi benzeri tablolar için ipairs kullanın.
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherry
-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
print(i, v) -- only 1,10 and 2,20
endpairs ve ipairs Karşılaştırması
Her birini ne zaman kullanacağınızı bilin: ipairs sıralı, ardışık diziler içindir; pairs sözlükler veya karma tablolar içindir. ipairs ilk nil boşluğunda durur; pairs ise nil olmayan her anahtarı ziyaret eder. Yalnızca dizilerden oluşan tablolar için ipairs daha yerleşik bir kullanımdır.
local mixed = {10, 20, key="val", 30}
-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
print(i, v) -- 1:10, 2:20, 3:30
end
-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
print(k, v) -- 1:10, 2:20, 3:30, key:val
endKapanımla Özel Yineleyici
Kapanım olarak kendi yineleyicinizi yazabilirsiniz. Üretici işlev, her çağrıda konumu ilerleten durum bilgili bir kapanım döndürür. Döndürülecek bir şey kalmadığında genel for'u durdurmak için nil döndürür.
local function range(from, to, step)
step = step or 1
local i = from - step
return function()
i = i + step
if i <= to then return i end
end
end
for n in range(1, 10, 2) do
io.write(n .. " ")
end
print() -- 1 3 5 7 9Yineleyici olarak string.gmatch
string.gmatch(s, pattern), s dizgesindeki kalıbın tüm eşleşmeleri üzerinde bir yineleyici döndürür. Dizgeleri bölmek, simgeleri çıkarmak veya bir kalıbın tüm görülme noktalarını bulmak için yaygın olarak kullanılır.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- foxGenel for içinde break
Genel for döngüsünden break kullanarak erken çıkabilirsiniz. Bu, arama yaparken kullanışlıdır: bir eşleşme bulunana kadar yineleyin, ardından çıkın. Çıkıştan sonra yürütme, end ifadesinden sonraki ifadede devam eder.
local inventory = {
{name="sword", damage=50},
{name="shield", armor=30},
{name="bow", damage=35},
}
local target = "shield"
for i, item in ipairs(inventory) do
if item.name == target then
print("Found at index", i)
break
end
endYineleme Sırasında Tabloları Değiştirme
pairs() ile yineleme yaparken bir tabloya asla anahtar eklemeyin veya tablodan anahtar çıkarmayın; davranış tanımsızdır (bazı değişiklikler görülebilir, bazıları atlanabilir). Bir tabloyu değiştirmeniz gerekiyorsa değişiklikleri geçici bir listede toplayın ve döngüden sonra uygulayın.
local t = {a=1, b=2, c=3, d=4}
local toDelete = {}
-- Collect keys to delete
for k, v in pairs(t) do
if v % 2 == 0 then
toDelete[#toDelete+1] = k
end
end
-- Delete after iteration
for _, k in ipairs(toDelete) do
t[k] = nil
end
-- t = {a=1, c=3}Numaralandırma Düzeni
Hem dizine hem de değere ihtiyacınız olduğunda ikisini de sağlayan ipairs'ı kullanın. Yalnızca değerlere ihtiyacınız varsa ve dizini önemsemiyorsanız dizin için geleneksel "önemsiz" değişken adı olarak _ kullanabilirsiniz.
local colors = {"red", "green", "blue"}
-- With index
for i, color in ipairs(colors) do
print(i .. ": " .. color)
end
-- Ignore index with _
for _, color in ipairs(colors) do
print(color) -- just the values
endnext() İşlevini Doğrudan Kullanma
next(t, key), temel dolaşma işlevidir. key'den sonraki anahtar-değer çiftini döndürür; başka çift yoksa nil döndürür. next(t, nil) ilk girdiyi verir. Bir tablonun boş olmadığını denetlemek için next(t) ~= nil kullanabilirsiniz; bu, saymaktan daha hızlıdır.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- falseHızlı Kontrol
Bir tablodaki ilk nil boşluğunda hangi yineleyici durur?
Özet: Genel for ve break
Özet:
pairs(t)— tüm anahtarlar, herhangi bir sıraipairs(t)— 1..n arasındaki tam sayı anahtarları, sıralı,nildeğerinde durur- Özel yineleyiciler: durmak için
nildöndüren bir kapanım döndürün breakdöngüden erken çıkarpairsile dolaşırken tabloyu asla değiştirmeyin; değişiklikleri toplayıp sonra uygulayınnext(t) == nil— hızlı boşluk denetimi
Sıkça Sorulan Sorular
“Genel for ve break” dersi ücretsiz mi?
Evet — “Genel for ve break” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Genel for ve break” dersinde ne öğreneceğim?
pairs/ipairs ile genel for kullanın ve break ile döngü akışını denetleyin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Genel for ve break” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.