Successivo: Variabili di tipo dinamico, Precedente: Chiamata di una funzione, Su: Funzioni definite dall'utente [Contenuti][Indice]
return
Come visto in parecchi esempi precedenti,
il corpo di una funzione definita dall’utente può contenere un’istruzione
return
.
Quest’istruzione restituisce il controllo a quella parte del
del programma awk
che ha effettuato la chiamata.
Può anche essere usata per restituire un valore da usare nel resto del
programma awk
.
Questo è un esempio:
return
[espressione]
La parte espressione è opzionale.
Probabilmente per una svista, POSIX non definisce qual è il valore
restituito, se si omette espressione. Tecnicamente parlando, questo
rende il valore restituito indefinito, e quindi, indeterminato.
In pratica, tuttavia, tutte le versioni di awk
restituiscono
semplicemente la stringa nulla, che vale zero se usata
in un contesto che richiede un numero.
Un’istruzione return
senza una espressione è considerata presente
alla fine di ogni definizione di funzione.
Quindi, se il flusso di esecuzione raggiunge la fine del corpo della
funzione, tecnicamente la funzione
restituisce un valore indeterminato.
In pratica, restituisce la stringa nulla. awk
non emette alcun messaggio di avvertimento se si usa
il valore restituito di una tale funzione.
Talvolta può capitare di scrivere una funzione per quello che fa, non per
quello che restituisce. Una tale funzione corrisponde a una funzione
void
in C, C++, o Java, o a una procedure
in Ada.
Quindi, può essere corretto non
restituire alcun valore; basta fare attenzione a non usare poi il
valore restituito da una tale funzione.
Quello che segue è un esempio di una funzione definita dall’utente che restituisce un valore che è il numero più alto presente tra gli elementi di un vettore:
function massimo(vettore, i, max) { for (i in vettore) { if (max == "" || vettore[i] > max) max = vettore[i] } return max }
La chiamata a massimo()
ha un solo argomento, che è il nome di
un vettore. Le variabili locali i
e max
non vanno intese
come argomenti; nulla vieta di passare più di un argomento
a massimo()
ma i risultati sarebbero strani. Gli spazi extra prima
di i
nella lista dei parametri della funzione indicano che i
e
max
sono variabili locali.
È consigliabile seguire questa convenzione quando si definiscono delle funzioni.
Il programma seguente usa la funzione massimo()
. Carica un vettore,
richiama massimo()
, e quindi elenca il numero massimo contenuto in
quel vettore:
function massimo(vettore, i, max) { for (i in vettore) { if (max == "" || vettore[i] > max) max = vettore[i] } return max }
# Carica tutti i campi di ogni record in numeri. { for (i = 1; i <= NF; i++) numeri[NR, i] = $i }
END { print massimo(numeri) }
Dato il seguente input:
1 5 23 8 16 44 3 5 2 8 26 256 291 1396 2962 100 -6 467 998 1101 99385 11 0 225
il programma trova (come si può immaginare) che 99.385 è il valore più alto contenuto nel vettore.
Successivo: Variabili di tipo dinamico, Precedente: Chiamata di una funzione, Su: Funzioni definite dall'utente [Contenuti][Indice]