Lua va bene per algoritmi e strutture dati?
Per impararli, sorprendentemente bene: avendo solo le tabelle da cui partire, ogni struttura è esplicita e il codice resta breve. Il rovescio della medaglia è che le tabelle perdonano gli errori in silenzio: per convenzione gli array partono da 1, una chiave mancante restituisce nil invece di un errore, e l'operatore di lunghezza #t è affidabile solo su una sequenza senza buchi nil. Pochi colloqui si svolgono in Lua, quindi se il tuo obiettivo è un colloquio, i pacchetti da colloquio sono disponibili anche nel linguaggio che userai lì.
Come si costruiscono una pila e una coda da una tabella Lua?
Una pila è la parte array usata da un'estremità: table.insert(t, x) inserisce e table.remove(t) estrae. Una coda richiede più attenzione, perché table.remove(t, 1) sposta indietro di una posizione ogni elemento rimanente, quindi ogni estrazione costa O(n). Tieni invece due indici, first e last: aggiungi in last + 1, leggi in first, imposta quello slot a nil e avanza, e l'estrazione diventa a tempo costante. Nel primo passaggio le costruisci entrambe.
Perché in Lua #t a volte dà la lunghezza sbagliata?
Perché # restituisce un bordo della tabella: un indice n per cui t[n] non è nil e t[n + 1] lo è. Una sequenza vera ha esattamente un bordo, la sua lunghezza; metti un nil in mezzo e i bordi possono essere diversi, e # può restituirne uno qualsiasi. Quindi non memorizzare mai nil in un array che misuri con #, e nelle strutture con buchi, come una coda a due indici, tieni tu il conto della dimensione.
Le strutture dati contano per lo scripting su Roblox?
Sì, non appena un gioco supera una manciata di oggetti. Un inventario è una tabella hash, l'ordine di spawn o dei turni è una coda, un elenco di cooldown può essere una coda di priorità, e trovare un percorso su una mappa è una ricerca su grafo. Luau, il linguaggio in cui si scrivono gli script di Roblox, deriva da Lua 5.1 e ne conserva le tabelle, gli array che partono da 1 e l'operatore #, quindi ciò che costruisci qui si trasferisce direttamente.
Quali corsi di questo percorso non sono insegnati in Lua?
Tre: la programmazione dinamica e la serie di colloqui in Python, insegnate in Python, e la manipolazione dei bit, insegnata in C++. Sono elencati dopo i passaggi, ognuno con un link che lo apre nel suo linguaggio. Una memoizzazione in Lua è una tabella; gli operatori bit a bit sono arrivati solo con Lua 5.3, che ha gli stessi &, |, << e >> del C++ e scrive sia lo XOR sia il NOT come ~.
Devo conoscere Lua prima di iniziare questo percorso?
Almeno tabelle, funzioni, cicli e variabili locali; le metatabelle aiutano se vuoi strutture che si comportino come oggetti. Se sono argomenti nuovi, il corso di Lua di Coddy li copre prima, gratis, e questo percorso riprende da dove finisce.