for Generik dan break
Gunakan for generik bersama pairs/ipairs dan kendalikan alur perulangan dengan break.
for Generik dan break adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.
Protokol for Generik
Perulangan for generik Lua bekerja dengan fungsi iterator. Sintaksnya adalah for vars in iter_func, state, init do. Pada setiap iterasi, Lua memanggil iter_func(state, lastVar) dan menetapkan nilai yang dikembalikan ke vars. Perulangan berhenti saat nilai pertama yang dikembalikan adalah nil.
-- 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
endpairs() untuk Semua Kunci
pairs(t) mengembalikan iterator yang melintasi semua pasangan kunci-nilai dalam tabel, termasuk kunci string, kunci bilangan bulat, dan campuran keduanya. Urutan iterasi untuk kunci nonbilangan bulat tidak ditentukan (urutan hash). Bagian larik dan bagian hash sama-sama disertakan.
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 orderipairs() untuk Kunci Larik
ipairs(t) melakukan iterasi pada kunci bilangan bulat mulai dari 1 dan berhenti pada nilai nil pertama. Cara ini aman, dapat diprediksi, dan mempertahankan urutan. Gunakan ipairs untuk tabel yang menyerupai larik jika urutan penting dan Anda ingin berhenti pada celah pertama.
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 dibandingkan dengan ipairs
Pahami kapan masing-masing digunakan: ipairs untuk larik berurutan; pairs untuk kamus atau tabel campuran. ipairs berhenti pada celah nil pertama, sedangkan pairs mengunjungi setiap kunci yang nilainya bukan nil. Untuk larik murni, ipairs lebih sesuai dengan kebiasaan Lua.
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
endIterator Khusus dengan Fungsi Penutup
Anda dapat menulis iterator sendiri sebagai fungsi penutup. Fungsi pembuat mengembalikan fungsi penutup yang menyimpan keadaan dan memajukan posisi pada setiap pemanggilan. Saat tidak ada lagi yang dapat dikembalikan, fungsi tersebut mengembalikan nil untuk menghentikan for generik.
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 9string.gmatch sebagai Iterator
string.gmatch(s, pattern) mengembalikan iterator untuk semua kecocokan pola dalam string s. Fungsi ini umum digunakan untuk memisahkan string, mengekstrak token, atau menemukan semua kemunculan suatu pola.
local sentence = "the quick brown fox"
for word in string.gmatch(sentence, "%a+") do
print(word)
end
-- the
-- quick
-- brown
-- foxbreak dalam for Generik
Anda dapat keluar lebih awal dari perulangan for generik menggunakan break. Hal ini berguna untuk pencarian: lakukan iterasi hingga kecocokan ditemukan, lalu gunakan break. Setelah keluar, eksekusi dilanjutkan pada pernyataan setelah end.
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
endMengubah Tabel Selama Iterasi
Jangan pernah menambahkan atau menghapus kunci dari tabel saat melakukan iterasi dengan pairs()—perilakunya tidak terdefinisi (sebagian perubahan mungkin terlihat, sedangkan perubahan lainnya terlewati). Jika perlu mengubah tabel, kumpulkan perubahan dalam daftar sementara dan terapkan setelah perulangan.
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}Pola Enumerasi
Saat memerlukan indeks dan nilai sekaligus, gunakan ipairs yang menyediakan keduanya. Saat hanya memerlukan nilai dan tidak memedulikan indeks, Anda dapat menggunakan _ sebagai nama variabel konvensional yang berarti indeks tersebut diabaikan.
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() Secara Langsung
next(t, key) adalah fungsi dasar untuk melintasi tabel. Fungsi ini mengembalikan pasangan kunci-nilai berikutnya setelah key, atau nil jika tidak ada lagi. next(t, nil) memberikan entri pertama. Anda dapat menggunakan next(t) ~= nil untuk memeriksa apakah tabel tidak kosong—lebih cepat daripada menghitung isinya.
local function isEmpty(t)
return next(t) == nil
end
print(isEmpty({})) -- true
print(isEmpty({1,2,3})) -- false
print(isEmpty({a=1})) -- falsePemeriksaan Singkat
Iterator mana yang berhenti pada celah nil pertama dalam tabel?
Ringkasan: for Generik dan break
Ringkasan:
pairs(t)— semua kunci, dalam urutan apa punipairs(t)— kunci bilangan bulat 1..n, berurutan, berhenti padanil- Iterator khusus: kembalikan fungsi penutup yang mengembalikan
niluntuk berhenti breakkeluar lebih awal dari perulangan- Jangan pernah mengubah tabel di tengah iterasi
pairs; kumpulkan perubahan dan terapkan setelahnya next(t) == nil— pemeriksaan kosong yang cepat
Pertanyaan yang Sering Diajukan
Apakah pelajaran “for Generik dan break” gratis?
Ya — teks lengkap “for Generik dan break” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “for Generik dan break”?
Gunakan for generik bersama pairs/ipairs dan kendalikan alur perulangan dengan break. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Lua Academy?
Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “for Generik dan break” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pernyataan if, elseif, dan else
- Perulangan while dan repeat-until
- Perulangan for Numerik
- for Generik dan break