0Pricing
Lua Academy · Lekcja

Protokół ogólnej pętli for

Proszę poznać trójwartościowy protokół iteratora: funkcję iteratora, stan i zmienną sterującą.

Protokół ogólnej pętli for to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.

Jak działa generic for

Instrukcja for wywołuje przy każdej iteracji funkcję iteratora. Przekazuje jej stan i zmienną sterującą, a kończy działanie, gdy funkcja zwróci nil.

Zwracanie trzech wartości

for var in iter, state, init do — Lua rozpakowuje to jako: funkcję iteratora iter, niezmienny stan state oraz początkową zmienną sterującą init.

Protokół ipairs

ipairs(t) zwraca bezstanową funkcję iteratora, tabelę jako stan oraz 0 jako początkową zmienną sterującą. Każde wywołanie zwraca następny indeks i wartość.

for i, v in ipairs({10, 20, 30}) do
  print(i, v)
end

Własny iterator zwracający trzy wartości

Własny bezstanowy iterator można zaimplementować, jawnie dostarczając wszystkie trzy wartości.

local function iter(t, i)
  i = i + 1
  local v = t[i]
  if v then return i, v end
end
for i, v in iter, {"a","b","c"}, 0 do
  print(i, v)
end

Uproszczenie za pomocą domknięcia

Iterator oparty na domknięciu musi zwracać tylko funkcję iteratora (stan ani zmienna sterująca nie są potrzebne — znajdują się w upvalues).

local function values(t)
  local i = 0
  return function()
    i = i + 1
    return t[i]
  end
end
for v in values({1,2,3}) do print(v) end

nil kończy pętlę

Pętla generic for kończy się natychmiast, gdy funkcja iteratora zwróci nil jako pierwszą zwracaną wartość. Jest to warunek zakończenia iteracji.

Wiele zwracanych wartości

Iterator może zwracać wiele wartości; każda z nich jest przypisywana odpowiedniej zmiennej pętli: for k, v in pairs(t).

for k, v in pairs({x=1, y=2}) do
  print(k, v)
end

Użycie parametru stanu

Parametr stanu jest przekazywany bez zmian do każdego wywołania iteratora. W przypadku iteratorów bezstanowych zawiera cały wymagany kontekst (np. samą tabelę).

Coroutine.wrap jako iterator

coroutine.wrap(fn) zwraca funkcję, która przy każdym wywołaniu wznawia korutynę; wartości przekazane przez yield stają się wartościami zwracanymi — idealnie nadaje się jako iterator generic for.

local function countdown(n)
  return coroutine.wrap(function()
    for i = n, 1, -1 do coroutine.yield(i) end
  end)
end
for v in countdown(5) do print(v) end

Kompozycja iteratorów

Iteratory można komponować: opakować jeden iterator w drugi, aby dodać filtrowanie lub transformację.

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

Nieskończone iteratory

Iterator, który nigdy nie zwraca nil, tworzy nieskończoną pętlę. Należy zawsze zapewnić warunek zakończenia lub użyć break.

local function naturals()
  local n = 0
  return function() n = n+1; return n end
end
for v in naturals() do
  if v > 5 then break end
  print(v)
end

Pytanie o generic for

Kiedy pętla generic for się kończy?

Podsumowanie: protokół generic for

Generic for wywołuje funkcję iteratora z niezmiennym stanem i zmienną sterującą. Kończy działanie po otrzymaniu nil. Domknięcia upraszczają iteratory stanowe, zapisując stan w upvalues.

Często zadawane pytania

Czy lekcja „Protokół ogólnej pętli for” jest bezpłatna?

Tak — pełny tekst „Protokół ogólnej pętli for” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Protokół ogólnej pętli for”?

Proszę poznać trójwartościowy protokół iteratora: funkcję iteratora, stan i zmienną sterującą. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Lua Academy?

Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Protokół ogólnej pętli for”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?

Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Protokół ogólnej pętli for
  2. Iteratory bezstanowe
  3. Iteratory stanowe z domknięciami
  4. Generatory oparte na korutynach
← Powrót do Lua Academy