Lua - Iterators: A Beginner's Guide
Halo, para programer Lua masa depan! Hari ini, kita akan memulai perjalanan menarik ke dunia iterator Lua. Jangan khawatir jika Anda baru dalam pemrograman – saya akan menjadi panduan ramah Anda, dan kita akan mengambil ini langkah demi langkah. Pada akhir panduan ini, Anda akan mengulang seperti seorang ahli!
Apa Itu Iterators?
Sebelum kita mendalam, mari kita mengerti apa itu iterators. Bayangkan Anda memiliki keranjang jeruk, dan Anda ingin memeriksa setiap jeruk satu per satu. Sebuah iterator seperti tangan magis yang membantu Anda mengambil setiap jeruk bergilir, tanpa Anda perlu khawatir tentang berapa banyak jeruk di keranjang atau bagaimana mereka diatur.
Dalam hal pemrograman, iterators adalah objek yang memungkinkan kita untuk melintasi semua elemen dalam suatu koleksi (seperti array atau tabel di Lua) tanpa perlu mengetahui struktur dasar dari koleksi itu.
Sekarang, mari kita jelajahi jenis-jenis iterator yang berbeda di Lua!
Generic For Iterator
Loop generic for
adalah cara paling umum untuk menggunakan iterators di Lua. Itu sederhana, elegan, dan kuat. Mari kita mulai dengan contoh dasar:
local buah = {"apple", "banana", "orange", "grape"}
for i, buah_buahan in ipairs(buah) do
print(i .. ": " .. buah_buahan)
end
Jika Anda menjalankan kode ini, Anda akan melihat:
1: apple
2: banana
3: orange
4: grape
mari kitauraikan ini:
- Kita membuat tabel (array) buah.
- Kita menggunakan loop
for
denganipairs
, yang adalah fungsi iterator bawaan. -
i
adalah indeks, danbuah_buahan
adalah nilai di indeks itu. - Loop secara otomatis berhenti saat mencapai akhir tabel.
Apakah itu menarik? Itu seperti tangan magis kita mengambil setiap buah dan memberitahu kita posisinya di keranjang!
Contoh Lain: Mengulang Over Dictionary
Mari coba sesuatu yang sedikit berbeda:
local orang = {name = "Alice", age = 30, job = "Developer"}
for key, value in pairs(orang) do
print(key .. " = " .. value)
end
Ini akan mengeluarkan:
name = Alice
age = 30
job = Developer
Di sini, kita menggunakan pairs
bukannya ipairs
. pairs
sangat cocok untuk tabel yang tidak hanya daftar sederhana, seperti tabel orang
kita.
Stateless Iterators
Sekarang, mari kita naik tingkat. Iterators stateless adalah fungsi yang tidak menyimpan state antara pemanggilan. Mereka sederhana dan efisien. Ini adalah contoh:
function persegi_panjang(max, current)
current = current or 0
if current >= max then
return nil
end
return current + 1, (current + 1)^2
end
for i, kuadrat in persegi_panjang, 5 do
print(i .. " kuadrat adalah " .. kuadrat)
end
Ini akan mengeluarkan:
1 kuadrat adalah 1
2 kuadrat adalah 4
3 kuadrat adalah 9
4 kuadrat adalah 16
5 kuadrat adalah 25
mari kitauraikan ini:
- Kita definisikan fungsi
persegi_panjang
yang mengambil nilaimax
dancurrent
. - Fungsi ini mengembalikan nomor berikutnya dan kuadratnya, atau
nil
saat kita selesai. - Dalam loop
for
, kita gunakan fungsi ini secara langsung sebagai iterator.
Itu seperti memiliki kalkulator yang memberikan kita nomor kuadrat berikutnya setiap kali kita menekan tombol!
Stateful Iterators
Akhirnya, mari kita bicarakan tentang iterators stateful. Mereka lebih kompleks tapi juga lebih kuat. Mereka mengingat state antara pemanggilan. Ini adalah contoh:
function fibonacci(n)
local count = 0
local a, b = 0, 1
return function()
if count < n then
count = count + 1
a, b = b, a + b
return count, a
end
end
end
for i, fib in fibonacci(10) do
print("The " .. i .. "th Fibonacci number is " .. fib)
end
Ini akan mengeluarkan 10 nomor Fibonacci pertama:
The 1th Fibonacci number is 1
The 2th Fibonacci number is 1
The 3th Fibonacci number is 2
The 4th Fibonacci number is 3
The 5th Fibonacci number is 5
The 6th Fibonacci number is 8
The 7th Fibonacci number is 13
The 8th Fibonacci number is 21
The 9th Fibonacci number is 34
The 10th Fibonacci number is 55
Iterator ini seperti pabrik kecil nomor Fibonacci. Setiap kali kita memanggilnya, ia mengingat tempat ia berhenti dan memberikan kita nomor berikutnya dalam urutan.
Kesimpulan
Dan di sana Anda punya nya! Kita telah menjelajahi dunia iterators Lua, dari loop generic for
sederhana ke iterators stateful yang lebih kompleks. Ingat, latihan membuat sempurna. Cobalah membuat iterators sendiri untuk urutan atau struktur data yang berbeda.
Berikut adalah tabel referensi cepat dari fungsi iterator yang kita gunakan:
Fungsi | Deskripsi | Kasus Penggunaan |
---|---|---|
ipairs() | Mengulang over array-like tables | Untuk daftar bernomor |
pairs() | Mengulang over all table elements | Untuk dictionary atau tabel campuran |
Fungsi Khusus | Bisa stateless atau stateful | Untuk urutan spesial atau iterasi kompleks |
Selamat coding, dan semoga iterasimu selalu berbuah!
Credits: Image by storyset