9.4 Sommario
-
awk
include delle funzioni predefinite e consente all’utente
di definire le sue proprie funzioni.
- POSIX
awk
include tre tipi di funzioni predefinite: numeriche, di
stringa, e di I/O. gawk
prevede funzioni per ordinare vettori, per
lavorare con valori che rappresentano marcature temporali,
per la manipolazione di bit,
per determinare il tipo di una variabile (vettoriale piuttosto che scalare), e
programmi per l’internazionalizzazione e la localizzazione. gawk
prevede anche parecchie estensioni ad alcune funzioni standard, tipicamente
nella forma di ulteriori argomenti.
- Le funzioni accettano zero o più argomenti e restituiscono un valore. Le
espressioni che specificano il valore di ogni argomento sono valutate
completamente prima della chiamata
a una funzione. L’ordine di valutazione di questi argomenti non è definito.
Il valore restituito dalla funzione può essere ignorato.
- La gestione delle barre inverse in
sub()
e gsub()
non è
semplice.
È più semplice nella funzione di gawk
gensub()
,
ma anche questa funzione richiede attenzione quando la si usa.
- Le funzioni definite dall’utente consentono importanti funzionalità ma hanno
anche alcune ineleganze sintattiche. In una chiamata di funzione non si può
inserire alcuno spazio tra il nome della funzione e la parentesi sinistra
aperta che inizia la lista degli argomenti. Inoltre, non c’è nessuna
prescrizione per le variabili locali, e per questo la
convenzione in uso è di aggiungere parametri extra, e di separarli visivamente
dai parametri veri e propri inserendo degli spazi bianchi prima di essi.
- Le funzioni definite dall’utente possono chiamare altre
funzioni definite dall’utente (oltre a quelle predefinite)
e possono chiamare se stesse ricorsivamente. I parametri di funzione
“nascondono” qualsiasi variabile globale che abbia lo stesso nome.
Non si può usare il nome di una variabile riservata (p.es.
ARGC
)
come nome di un parametro in funzioni definite dall’utente.
- I valori scalari sono passati alle funzioni definite dall’utente
per valore. I parametri che sono dei vettori sono passati alle funzioni
per riferimento; ogni modifica fatta dalla funzione a un parametro che
sia un vettore è quindi visibile dopo aver eseguito quella funzione.
- L’istruzione
return
serve per tornare indietro da una funzione definita
dall’utente. Un’espressione opzionale diviene il valore restituito dalla
funzione. Una funzione può solo restituire valori di tipo scalare.
- Se una variabile che non è stata mai usata è passata a una funzione
definita dall’utente, il modo con cui quella funzione elabora la variabile
ne può determinare il tipo: o scalare o vettoriale.
-
gawk
consente la chiamata indiretta di funzioni usando una sintassi
speciale. Impostando una variabile al nome di una funzione, si può
determinare al momento dell’esecuzione che funzione sarà chiamata in un certo
punto del programma. Questo equivale a usare un puntatore a una funzione nei
linguaggi C e C++.