il linguaggio Lua: parte 11

segue dalla parte 10 Rocce di Luna Poter organizzare il codice in più file è molto utile per modularizzare i programmi, creando package che verranno caricati tramite l’istruzione require “nomefile”. Vediamo un esempio: -- geompkg.lua module("geom") local function quadrato(x) return x*x end local function rettangolo(b,h) return b*h end function area(param) if param.lato then return quadrato(param.lato) end local area=rettangolo(param.base,param.altezza) if param.triangolo or param.trapezio then return area/2 end return area end -- usepkg.lua require('geompkg') print(geom.area{base=3,altezza=5}) print(geom.area{lato=3}) --errore, quadrato è local nel modulo --quindi non accessibile esternamente print(geom.quadrato(5)) nell’esempio vogliamo separare le funzioni di calcolo geometrico dal programma principale, così le raggruppiamo in un file geompkg.lua; notiamo che nello stesso file abbiamo definito anche delle funzioni locali che non saranno visibili all’esterno, come evidenziato dall’ultima riga di usepkg.lua. più avanti impareremo come un modulo possa anche essere binario, cioè compilato come codice nativo. Verificheremo perciò come sia agevole usare da Lua le sterminate librerie disponibili in C. ...

September 7, 2018 · Andrea Manzini

il linguaggio Lua: parte 10

segue dalla parte 9 stringhe e regular expression in questa puntata apriremo una piccola digressione per analizzare le funzionalità del modulo string, in particolare l’uso delle regular expression. Il modulo string ci mette a disposizione potenti funzioni di ricerca e sostituzione basate su espressioni regolari. Una completa implementazione delle regexp POSIX occuperebbe più dell’intero linguaggio, ma tutto sommato le funzionalità principali sono state mantenute, e gli autori di Lua sono riusciti a impacchettare un “motore” di pattern matching in meno di 500 righe di codice. Vediamone per sommi capi alcune caratteristiche: La funzione string.find(s,p) cerca un pattern p dentro la stringa s e ritorna una tupla di due valori: la posizione dove inizia la corrispondenza e quella dove finisce; in caso il pattern non sia presente, ritornerà nil. ...

August 3, 2018 · Andrea Manzini

il linguaggio Lua: parte 9

segue dalla parte 8 il modulo lunare Per mantenere la sua natura minimalista, Lua ha ben poche funzionalità incluse nel linguaggio e delega molti aspetti a librerie e moduli esterni. Ad esempio le operazioni matematiche sono accessibili nel package, o se preferite, namespace col prefisso math: $ lua >print(math.sin(math.pi/2)) 1 sarebbe oltremodo noioso elencare tutte le funzioni presenti, basti dire che oltre alle funzioni trigonometriche abbiamo logaritmi, esponenziali, modulo, minimo, massimo, arrotondamenti e generazione di valori random. Per operare in modo agevole con tabelle e vettori abbiamo a disposizione il modulo table: ...

June 22, 2018 · Andrea Manzini

il linguaggio Lua: ottava parte

segue dalla settima parte Oggetti volanti e non Lua non è un linguaggio nativamente object-oriented. Se nei nostri script volessimo adottare uno stile OOP, ad esempio per modellare le operazioni su un conto corrente la cosa più naturale sarebbe usare una tabella: Conto = { saldo = 200.0 } Questa sintassi potrebbe essere assimilata al ‘costruttore’ dell’oggetto Conto. Possiamo anche definire dei metodi: function Conto.preleva(cifra) Conto.saldo = Conto.saldo - cifra end e quindi potremmo comodamente chiamare, problemi economici a parte: ...

April 23, 2018 · Andrea Manzini