0Pricing
Lua Academy · Pelajaran

Iterator Tanpa Keadaan

Tuliskan iterator tanpa keadaan seperti ipairs dan implementasikan variannya sendiri.

Iterator Tanpa Keadaan adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Apa Itu Pengiterasi Tanpa Keadaan?

Pengiterasi tanpa keadaan tidak menyimpan keadaan internal. Semua informasi diteruskan sebagai argumen pada setiap pemanggilan: keadaan tetap dan variabel kendali saat ini.

ipairs: Contoh Standar

ipairs tidak menyimpan keadaan—fungsi ini menggunakan tabel sebagai keadaan dan indeks saat ini sebagai variabel kendali.

local function myIpairs(t, i)
  i = i + 1
  local v = t[i]
  if v ~= nil then return i, v end
end
-- Use: for i,v in myIpairs, t, 0 do

Pengiterasi squares

Pengiterasi tanpa keadaan yang mengembalikan kuadrat berurutan. Keadaan menyimpan batas, sedangkan variabel kendali adalah bilangan saat ini.

local function squaresIter(max, n)
  n = n + 1
  if n <= max then return n, n*n end
end
for n, sq in squaresIter, 5, 0 do
  print(n, sq)
end

Tidak Memerlukan Fungsi Penutup

Pengiterasi tanpa keadaan menghindari alokasi fungsi penutup. Karena semua keadaan diteruskan sebagai argumen, tidak ada alokasi heap pada setiap iterasi.

Menerapkan Pengiterasi Gaya pairs

Pengiterasi kunci-nilai tanpa keadaan yang menggunakan next sebagai fungsi pengiterasi—persis seperti cara kerja pairs.

for k, v in next, {a=1, b=2} do
  print(k, v)
end

Fungsi next

next(t, k) mengembalikan pasangan kunci-nilai berikutnya setelah kunci k. Teruskan nil (atau hilangkan argumen) untuk memulai dari awal.

local t = {x=10, y=20}
local k, v = next(t, nil)
print(k, v)
k, v = next(t, k)
print(k, v)

Pengiterasi Rentang Kustom

Pengiterasi rentang tanpa keadaan dengan langkah. Keadaan menyimpan tabel konfigurasi, sedangkan kendali adalah nilai saat ini.

local function rangeIter(state, n)
  n = n + state.step
  if n <= state.limit then return n end
end
for v in rangeIter, {limit=10, step=2}, 0 do
  print(v)
end

Keunggulan Kinerja

Pengiterasi tanpa keadaan ideal untuk perulangan yang ketat. Tidak ada fungsi penutup yang dibuat pada setiap pemanggilan, sehingga pengiterasi ini lebih cepat daripada pengiterasi fungsi penutup berkeadaan untuk penelusuran sederhana.

Keterbatasan

Saat iterasi memerlukan keadaan yang kompleks (beberapa pencacah, antrean, atau data dinamis), pengiterasi tanpa keadaan menjadi sulit digunakan. Sebagai gantinya, gunakan pengiterasi fungsi penutup berkeadaan atau coroutine.

Menggabungkan dengan table.move

Pengiterasi potongan tanpa keadaan mengembalikan elemen dari potongan tabel. Keadaan tetap menyimpan larik dan indeks akhir, sedangkan kendali adalah indeks saat ini.

Pengiterasi Tanpa Keadaan di Pustaka Standar

ipairs, pairs (melalui next), dan string.gmatch secara internal menggunakan desain tanpa keadaan atau hampir tanpa keadaan.

Pertanyaan tentang Pengiterasi Tanpa Keadaan

Apa yang membuat sebuah pengiterasi tidak memiliki keadaan?

Ringkasan: Pengiterasi Tanpa Keadaan

Pengiterasi tanpa keadaan menerima seluruh konteks sebagai argumen, tidak memerlukan alokasi fungsi penutup, dan memiliki kinerja tinggi. Pengiterasi ini ideal untuk penelusuran berurutan sederhana seperti pengindeksan larik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Iterator Tanpa Keadaan” gratis?

Ya — teks lengkap “Iterator Tanpa Keadaan” 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 “Iterator Tanpa Keadaan”?

Tuliskan iterator tanpa keadaan seperti ipairs dan implementasikan variannya sendiri. 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 2 dari 4.

Berapa lama pelajaran “Iterator Tanpa Keadaan” 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

  1. Protokol for Generik
  2. Iterator Tanpa Keadaan
  3. Iterator Berkeadaan dengan Closure
  4. Generator Berbasis Coroutine
← Kembali ke Lua Academy