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

il linguaggio Lua: settima parte

segue dalla sesta parte Iteratori e lua funzionale Cos’è un iteratore? Informaticamente parlando, è un costrutto che ci permette di scorrere strutture dati come liste, array, elenchi. In pratica, dato un elemento della struttura il compito dell’iteratore è farci avere il prossimo su cui operare. Non ci stupirà apprendere che in Lua gli iteratori sono funzioni. Vediamo un semplice esempio: function reverse_iter(t) local i=#t+1 return function() i=i-1 if i>=0 then return t[i] end end end reverse_iter è una fabbrica (factory) di funzioni: ogni volta che la chiamiamo, ci crea una nuova closure, ossia l’iteratore specifico per l’array che gli passiamo. La funzione che otteniamo mantiene il suo stato grazie alle variabili i e t ; quando non ci sono più elementi, restituisce nil. L’iteratore si potrebbe usare così: ...

March 3, 2018 · Andrea Manzini