0Pricing
Lua Academy · Ders

Kapanışlarla Durumlu Yineleyiciler

Kapanışları kullanarak çağrılar arasında durumunu koruyan yineleyiciler oluşturun.

Kapanışlarla Durumlu Yineleyiciler, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. 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.

Kapanımlar Ne Zaman Yararlıdır?

Bir yineleyicinin karmaşık ve zaman içinde değişen bir durumu (konum, yığın, geçmiş) koruması gerektiğinde kapanımlar doğal araçtır. Durum üstdeğerlerde tutulur.

Kapanım Yineleyicisi Deseni

Tek bir işlev döndürün; durum üstdeğerlerde tutulur. Genel for dışarıdan durum sağlamaz, yalnızca her seferinde işlevi çağırır.

local function chars(s)
  local i = 0
  return function()
    i = i + 1
    local c = s:sub(i, i)
    return c ~= "" and c or nil
  end
end
for c in chars("lua") do print(c) end

Dosya Satır İteratörü

Klasik, durum tutan bir kapanış tabanlı iteratör, EOF değerine ulaşana kadar bir dosya tanıtıcısından satırları üretir.

local function lines(filename)
  local f = io.open(filename, "r")
  return function()
    local line = f:read("*l")
    if not line then f:close() end
    return line
  end
end

Filtreleyen İteratör

Mevcut bir iteratörü, bir koşula uymayan öğeleri atlayan bir kapanışla sarın.

local function filtered(iter, pred)
  return function()
    local v = iter()
    while v ~= nil and not pred(v) do
      v = iter()
    end
    return v
  end
end

Eşleyen İteratör

Eşleme yapan bir iteratör, ara bir tablo oluşturmadan her öğeyi anında dönüştürür.

local function mapped(iter, fn)
  return function()
    local v = iter()
    if v ~= nil then return fn(v) end
  end
end

Birleştiren İteratör

Birleştirme yapan bir iteratör, iki iteratörden eş zamanlı olarak veri alır ve biri tükendiğinde durur.

local function zipped(iter1, iter2)
  return function()
    local a, b = iter1(), iter2()
    if a ~= nil and b ~= nil then return a, b end
  end
end

Zincir İteratörü

Zincir iteratörü, sonraki iteratöre geçmeden önce bir iteratörü tamamen tüketir.

local function chained(...)
  local iters = {...}
  local idx = 1
  return function()
    while idx <= #iters do
      local v = iters[idx]()
      if v ~= nil then return v end
      idx = idx + 1
    end
  end
end

Sayılı İteratör

Bir kapanış sayacı kullanarak bir iteratörü en fazla N değerle sınırlandırın.

local function take(n, iter)
  local count = 0
  return function()
    count = count + 1
    if count <= n then return iter() end
  end
end

Ağaç Gezinme İteratörü

Derinlik öncelikli ağaç gezinmesi, gezinme durumunu korumak için bir yığın (upvalue olarak tablo) kullanır.

local function dfs(root)
  local stack = {root}
  return function()
    if #stack == 0 then return nil end
    local node = table.remove(stack)
    for _, child in ipairs(node.children or {}) do
      stack[#stack+1] = child
    end
    return node
  end
end

Bellek Hususları

Durum tutan iteratörler bir kapanış nesnesi ayırır. Son derece sıkı iç döngüler için durumsuz bir iteratör tercih edilebilir. Karmaşık gezinmelerde kapanış kullanmaya kesinlikle değer.

Karşılaştırma: Durum Tutan ve Durumsuz

  • Durum tutan: karmaşık durum, her gezinme sırası, yazması kolay.
  • Durumsuz: basit sıralı erişim, sıfır bellek ayırma, hızlı.

Durum Tutan İteratör Sorusu

Durum tutan bir kapanış iteratörü durumunu nerede saklar?

Özet: Durum Tutan İteratörler

Kapanış tabanlı durum tutan iteratörler, karmaşık gezinme durumunu upvalue'larda saklar; böylece filtreler, eşlemeler, ağaçlar ve tembel işlem hatları oluşturulabilir. Bunların tümü birleştirilebilir ve bellek açısından verimlidir.

Sıkça Sorulan Sorular

“Kapanışlarla Durumlu Yineleyiciler” dersi ücretsiz mi?

Evet — “Kapanışlarla Durumlu Yineleyiciler” 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.

“Kapanışlarla Durumlu Yineleyiciler” dersinde ne öğreneceğim?

Kapanışları kullanarak çağrılar arasında durumunu koruyan yineleyiciler oluşturun. 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 3. dersidir.

“Kapanışlarla Durumlu Yineleyiciler” 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.

Bu kursun tüm dersleri

  1. Genel for Protokolü
  2. Durumsuz Yineleyiciler
  3. Kapanışlarla Durumlu Yineleyiciler
  4. Coroutine Tabanlı Üreteçler
← Lua Academy Sayfasına Dön