0Pricing
Lua Academy · Lezione

Il protocollo for generico

Comprenda il protocollo dell'iteratore a tre valori: funzione iteratore, stato e variabile di controllo.

Il protocollo for generico è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Come funziona il generic for

L’istruzione for chiama una funzione iteratore a ogni iterazione. Le passa uno stato e una variabile di controllo e si arresta quando la funzione restituisce nil.

Restituzione di tre valori

for var in iter, state, init do — Lua scompone questa istruzione in: funzione iteratore iter, stato invariabile state e variabile di controllo iniziale init.

Protocollo ipairs

ipairs(t) restituisce una funzione iteratore senza stato, la tabella come stato e 0 come variabile di controllo iniziale. Ogni chiamata restituisce l’indice e il valore successivi.

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

Iteratore personalizzato a tre valori

Implementi un iteratore personalizzato senza stato fornendo esplicitamente tutti e tre i valori.

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

Semplificare con una closure

Un iteratore basato su closure deve restituire solo la funzione iteratore (non servono stato né variabile di controllo, perché vivono negli upvalue).

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 termina il loop

Il loop generic for termina non appena la funzione iteratore restituisce nil come primo valore restituito. Questo è il contratto di terminazione.

Più valori restituiti

L’iteratore può restituire più valori; ciascuno viene assegnato a una variabile del loop: for k, v in pairs(t).

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

Utilizzo del parametro state

Il parametro state viene passato senza modifiche a ogni chiamata dell’iteratore. Negli iteratori senza stato contiene tutto il contesto necessario (ad esempio, la tabella stessa).

Coroutine.wrap come iteratore

coroutine.wrap(fn) restituisce una funzione che riprende la coroutine a ogni chiamata; i valori prodotti con yield diventano valori restituiti, rendendola perfetta come iteratore per un 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

Composizione di iteratori

Gli iteratori possono essere composti: è possibile racchiudere un iteratore in un altro per aggiungere filtraggio o trasformazioni.

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

Iteratori infiniti

Un iteratore che non restituisce mai nil crea un loop infinito. Fornisca sempre una condizione di terminazione o utilizzi 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

Domanda sul generic for

Quando si arresta il loop generic for?

Riepilogo: protocollo generic for

Il generic for chiama una funzione iteratore con uno stato invariabile e una variabile di controllo. Si arresta quando riceve nil. Le closure semplificano gli iteratori con stato codificando lo stato negli upvalue.

Domande Frequenti

La lezione «Il protocollo for generico» è gratuita?

Sì — il testo completo di «Il protocollo for generico» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Il protocollo for generico»?

Comprenda il protocollo dell'iteratore a tre valori: funzione iteratore, stato e variabile di controllo. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Il protocollo for generico»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Il protocollo for generico
  2. Iteratori senza stato
  3. Iteratori con stato tramite closure
  4. Generatori basati su coroutine
← Torna a Lua Academy