Sommario
Le funzioni sono il meccanismo principale per l'astrazione di dichiarazioni ed espressioni in Lua, possono svolgere compiti specifici, che sono per lo più chiamati procedure o subroutine in altre lingue.Le funzioni il più delle volte sono scritte con parentesi e una lista di argomenti che le consentiranno di eseguire un'azione specifica, dove può essere il caso che queste funzioni non necessitino di argomenti, tuttavia le parentesi devono essere specificate, vediamo un esempio di funzioni che usiamo come espressioni all'interno Lua:
Come possiamo vedere, potremmo usare le funzioni in entrambi i modi descritti, ma c'è un caso speciale in cui la funzione ha un singolo argomento e quell'argomento è un letterale stringa o un costruttore per una tabella o un array, in questo caso le parentesi sono facoltative, vediamo:
print "Hello World" print ("Hello World") dofile 'file.lua' dofile ('file.lua') print [[msg multi-line array]] print ([[msg multi-line array]]) f { var1 = 17, var2 = 30} f ({var1 = 17, var2 = 30}) tipo {} tipo ({})Secondo l'esempio siamo riusciti a scrivere le funzioni in entrambi i modi, essendo questi ugualmente validi.
Un programma in Lua Si possono utilizzare funzioni definite sia in C che nel linguaggio stesso, ad esempio tutte le funzioni standard della libreria di Lua sono scritti in C, che non è rilevante per gli sviluppatori, poiché l'invocazione di entrambi non ha alcuna differenza.
Sapendo questo, la definizione non differisce da altri linguaggi, la sintassi convenzionale di una funzione è governata dal nome della funzione, un elenco di parametri e il corpo della funzione, che è un elenco di dichiarazioni, vediamo un esempio per illustrare quanto spiegato:
funzione operazione (var) somma locale = 0 somma = var + 6 restituisce somma fineAbbiamo già la nostra funzione, tuttavia in questo modo non è molto utile, poiché deve essere invocata inviando il parametro di cui ha bisogno, per questo possiamo aggiungere un'altra riga al nostro codice per invocarla:
funzione operazione (var) somma locale = 0 somma = var + 6 ritorno somma fine stampa (operazione (57))Se eseguiamo il nostro esempio nel nostro terminale possiamo vedere come il nostro programma riceve il parametro e in base alle operazioni definite all'interno della nostra funzione restituisce un valore:
INGRANDIRE
Qualcosa che possiamo evidenziare dalle funzioni in Lua, è che i parametri funzionano come variabili locali, poiché vengono inizializzati con i valori che ricevono nella chiamata di funzione. Oltre a questo possiamo invocare una funzione con un diverso numero di argomenti definiti nella funzione, Lua si adatta a questo in un modo che fa con l'assegnazione multipla, un argomento che abbiamo trattato nell'ultimo tutorial, in cui gli argomenti extra vengono scartati e i parametri extra ottengono il tipo di valore zero, ad esempio immaginiamo di avere la seguente funzione:funzione funzione_multipla (a, b) restituisce aob endVediamo come nella seguente porzione di codice chiamiamo la funzione con parametri diversi e a destra come viene eseguita l'assegnazione:
f (8) a = 8, b = zero f (8, 15) a = 8, b = 15 f (8, 15, 4) a = 8, b = 15 (il valore 4 viene scartato)Sebbene questo comportamento possa portare a errori di programmazione, è anche utile, specialmente per gli argomenti predefiniti.
Una caratteristica non convenzionale ma piuttosto utile di Lua, è la capacità di restituire più risultati, anche le funzioni linguistiche predefinite possono farlo. Un esempio di questo è la funzione stringa.trova, che cerca un pattern di occorrenza in una data stringa, questa funzione restituisce due indici, il primo è l'indice in cui inizia questo pattern e il secondo è dove finisce, vediamo un esempio pratico dell'uso di questa funzione che possiamo fare perfettamente nella nostra console interattiva:
Le funzioni in cui scriviamo Lua possono anche tornare più risultati, per questo dobbiamo solo elencarli dopo il nostro ritorno, vediamo un esempio in cui creiamo una funzione per individuare il più grande di un elenco di elementi in un array e la sua posizione in esso:
funzione valore massimo (a) minimo locale = 1 locale m = a [minimo] per i, val in ipairs (a) do se val> m allora minimo = i; m = val fine fine ritorno m, minimo fine stampa (valore massimo ({8,10,23,12,5}))Come possiamo vedere, la nostra funzione è abbastanza semplice e nel nostro ritorno restituisce due valori, che in questo caso in base a ciò che stiamo inviando dovremmo restituire 23 come numero più grande e 3 come posizione, vediamo:
INGRANDIRE
Oltre alla funzionalità di restituzione di più risultati, Lua puoi anche ricevere un numero variabile di argomenti, ad esempio durante i tutorial abbiamo utilizzato la funzione Stampa con uno, due e fino a tre argomenti, cioè può ricevere un numero variabile di argomenti, ma come questo lo possono fare anche le funzioni che sviluppiamo in Lua, Vediamo un esempio di questo:funzione funzione_esempio (…) local s = 0 for i, v in ipairs {…} do s = s + v end return s end print (funzione_esempio (8, 19, 30, 14, 10))Se siamo osservatori nella definizione della nostra funzione abbiamo tre punti (…) all'interno delle parentesi, questo indica che la nostra funzione accetta un numero variabile di argomenti, e quando la funzione viene chiamata tutti gli argomenti inviati vengono raccolti internamente e quindi elaborati con la funzione ipairsVediamo l'output della nostra funzione che si occupa di aggiungere tutti gli argomenti inviati ad essa:
INGRANDIRE
Come vediamo questa caratteristica di Lua È abbastanza utile poiché ci permette di definire la nostra funzione senza sapere quanti argomenti gli passeremo, possiamo anche dire che questa funzionalità è un po' simile a ciò che si fa con il dichiarazioni preparate per gestire operazioni con Database in linguaggi come PHP o Giava.Invio di argomenti in Lua è posizionale, cioè, quando invochiamo una funzione, questi argomenti corrispondono ai parametri in base alle loro posizioni, il primo argomento corrisponde al primo parametro e così via, anche se a volte non sarebbe male specificare gli argomenti per nome.
Questa funzionalità è simile agli argomenti variabili, tuttavia quando si definiscono i nomi per i nostri argomenti, la loro gestione è molto più semplice, dove semplicemente usando una tabella o una disposizione possiamo fare questa funzionalità, qualcosa che è molto utile se la nostra funzione utilizza alcuni di questi parametri facoltativamente, vediamo la seguente chiamata a una funzione che riceve una certa quantità di parametri per costruire una finestra:
create_window {x = 0, y = 0, larghezza = 0, altezza = 200, titolo = 'Finestra Lua', sfondo = "blu", bordi = vero}In questo modo la funzione crea_finestra Sei libero di controllare questi argomenti per nome se lo desideri, vediamo come riceviamo questi argomenti nella nostra funzione e cosa possiamo fare con esso:
funzione create_window (opzioni) - controlla le opzioni obbligatorie se tipo (opzioni.titolo) ~ = "stringa" quindi errore ("nessun titolo") elseif tipo (opzioni.larghezza) ~ = "numero" quindi errore ("nessuna misura di larghezza " ) elseif type (options.height) ~ =" number "then error (" nessuna misurazione dell'altezza ") end - applichiamo le opzioni create_window (options.title, options.x o 0, options.y o 0, options .width, options.height, options.background o "white", options.edges) FineCome possiamo vedere, le possibilità nei nostri programmi sono molto maggiori con questa funzionalità e, sebbene questo esempio sia illustrativo, ci permette di vedere come possiamo applicare gli argomenti nominati all'interno delle nostre funzioni.
Ecco come finiamo questo tutorial, dove abbiamo imparato a gestire le funzioni in Lua, passando dalla sintassi convenzionale che possiamo trovare in altri linguaggi alle caratteristiche del linguaggio come i risultati multipli, gli argomenti variabili e la possibilità di nominare gli argomenti che inviamo alle nostre funzioni. In questo modo, aggiungendo molta più potenza ai nostri programmi includendo questi tipi di funzionalità e mantenendo la semplicità con cui Lua ci siamo abituati.Ti è piaciuto e hai aiutato questo Tutorial?Puoi premiare l'autore premendo questo pulsante per dargli un punto positivo