Le funzioni      

Funzioni

Nel Lua, una funzione può restituire un valore (proprio come i numeri e le stringhe), e come tale, può essere assegnata a variabili o passata ad altre funzioni.
Proprio perché nel Lua le funzioni hanno tutti i diritti ed i privilegi degli altri valori e non sono trattate come cittadini di seconda classe (come nel linguaggio C), convenzionalmente si dice che i valori nel Lua sono tutti valori di prima classe (trattati tutti nello stesso modo).
Le funzioni sono molto importanti in quanto permettono di dividere i comandi dello script in funzioni indipendenti, rendendolo più leggibile (ad esempio una funzione indipendente per ogni effetto in un karaoke ), oppure per ripetere parti di codice simile, ma che cambia a seconda del valore fornito inizialmente.
N.B. le funzioni (funzione) vengono anche chiamate subroutine, routine, procedura o sottoprogramma.
In Lua non è necessario dichiarare i tipi di valori che vengono restituiti dalle funzioni o gli argomenti che vengono passati ad una funzione, rendendo più flessibile il trattamento dei valori.
Gli argomenti di una funzione sono delle variabili utilizzate nella definizione di una funzione e sono necessari al suo funzionamento, in particolar modo se è necessario passare strutture o variabili da una funzione ad un'altra.
Lua può gestire argomenti multipli, quindi liste di argomenti variabili e multipli valori di ritorno.
Le funzioni vengono definite usando la parola chiave function.
La struttura del comando è la seguente:
function nome_della_funzione (argomento1, argomento2, ...)
   
end

end, viene usato per dire che la funzione (e praticamente ogni comando) finisce, è obbligatorio e molto importante
La funzione viene poi richiamata con il comando:
nome_della_funzione()
Es.
Una semplice funzione che stampa una scritta.
function foo()
   print("ciao")
end
foo()

Risultato:
ciao

Inoltre, la funzione può essere assegnata ad una variabile come qualsiasi altro tipo di valore.
Es.
x = function() print("ciao") end
x()

ciao

Altro esempio di funzione:
function clear_lines(subtitles, selected_lines, active_line)
  for z, i in ipairs(selected_lines) do
     local line = subtitles[i]
     line.text = ""
     subtitles[i] = line
  end
  aegisub.set_undo_point("Clear line text")
end
Gli argomenti di questa funzione sono:
subtitles, le righe dei sottotitoli (in generale tutte le righe del file .ass),
selected_lines, la lista delle righe selezionate
active_line, la riga attiva, cioè quella su cui si trova il cursore
Questa funzione serve a cancellare il testo della riga corrente (subtitles).
Per prima cosa il testo della riga corrente viene assegnato ad una variabile temporanea (local line = subtitles), viene cancellato il campo testo (line.text = ""), poi si sostituisce la riga corrente (subtitles = line). Si sarebbe potuto fare con un solo passaggio (subtitles.text = ""), ma personalmente preferisco agire su copie temporanee e poi salvare il risultato
ipairs restituisce la lista delle righe selezionate nell'aegisub, z e` l'indice, i l'elemento corrente della lista quindi la macro funziona solo sulle righe selezionate