Scratch è ideato per insegnare ai bambini e non è un linguaggio serio di programmazione.
Neanche insegnarti come programmare in lua rientra nell’ambito di questo libro. Tuttavia, se mastichi l’inglese puoi rifarti a quest’altro libro, “Programming in Lua”, per un’eccellente infarinatura sull’argomento. Se invece l’inglese non è il tuo forte, troverai comunque svariate guide in italiano in giro per la rete.
Un editor di codice con evidenziamento delle parole chiave è sufficiente per scrivere script in Lua. L’evidenziamento assegna colori diversi a parole e caratteri diversi, a seconda del loro significato, permettendo quindi di individuare più facilmente eventuali errori e inconsistenze.
Per esempio:
function ctf.post(team,msg)
if not ctf.team(team) then
return false
end
if not ctf.team(team).log then
ctf.team(team).log = {}
end
table.insert(ctf.team(team).log,1,msg)
ctf.save()
return true
end
Nel passaggio qui sopra, le parole chiave if
, then
, end
e return
sono evidenziate. E Lo stesso vale per le funzioni interne di Lua come table.insert
.
Tra gli editor più famosi che ben si prestano a lavorare in Lua, troviamo:
(ne esistono ovviamente anche altri)
L’essere locale o globale di una variabile determina da dove è possibile accederci. Una variabile locale è accessibile soltanto da dove viene definita. Ecco alcuni esempi:
-- Accessibile dall'interno dello script
local one = 1
function myfunc()
-- Accessibile dall'interno della funzione
local two = one + one
if two == one then
-- Accessible dall'interno del costrutto if
local three = one + two
end
end
Mentre le variabili globali sono accessibili da qualsiasi script di qualsiasi mod.
function one()
foo = "bar"
end
function two()
print(dump(foo)) -- Output: "bar"
end
one()
two()
Le variabili locali dovrebbero venire usate il più possibile, con le mod che creano al massimo una globale corrispondente al nome della mod. Crearne di ulteriori è considerato cattiva programmazione, e Minetest ci avviserà di ciò:
Assignment to undeclared global 'foo' inside function at init.lua:2
Per ovviare, usa local
:
function one()
local foo = "bar"
end
function two()
print(dump(foo)) -- Output: nil
end
one()
two()
Ricorda che nil
significa non inizializzato. Ovvero la variabile non è stata ancora assegnata a un valore, non esiste o è stata deinizializzata (cioè impostata a nil
)
La stessa cosa vale per le funzioni: esse sono variabili di tipo speciale, e dovrebbero essere dichiarate locali, in quanto altre mod potrebbero sennò avere funzioni con lo stesso nome.
local function foo(bar)
return bar * 2
end
Per permettere alle mod di richiamare le tue funzioni, dovresti creare una tabella con lo stesso nome della mod e aggiungercele all’interno. Questa tabella è spesso chiamata una API.
mymod = {}
function mymod.foo(bar)
return "foo" .. bar
end
-- In un'altra mod o script:
mymod.foo("foobar")
Il metodo consigliato per includere in una mod altri script Lua è usare dofile.
dofile(core.get_modpath("modname") .. "/script.lua")
Uno script può ritornare un valore, che è utile per condividere variabili locali private:
-- script.lua
return "Hello world!"
-- init.lua
local ret = dofile(core.get_modpath("modname") .. "/script.lua")
print(ret) -- Hello world!
Nei capitoli seguenti si parlerà nel dettaglio di come suddividere il codice di una mod.