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!

Lua - Iterators

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 dengan ipairs, yang adalah fungsi iterator bawaan.
  • i adalah indeks, dan buah_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 nilai max dan current.
  • 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