Successivo: Precedenza, Precedente: Valori e condizioni di verità, Su: Espressioni [Contenuti][Indice]
Una funzione è un nome per richiedere un particolare calcolo.
Il nome permette di richiamare
la funzione da qualsiasi punto del programma.
Per esempio, la funzione sqrt()
calcola la radice quadrata di un numero.
Un certo numero di funzioni sono predefinite, ossia sono
disponibili in ogni programma awk
. La funzione sqrt()
è una
di queste. Vedi la sezione Funzioni predefinite per un elenco di funzioni
predefinite e per le loro rispettive descrizioni. In aggiunta, l’utente può
definire delle funzioni da usare nel proprio programma.
Vedi la sezione Funzioni definite dall’utente
per istruzioni su come farlo.
Infine, gawk
permette di scrivere funzioni in C o in C++ che possono
essere chiamate dal proprio programma (vedi la sezione Scrivere estensioni per gawk
).
Una funzione viene utilizzata invocandola tramite un’espressione di chiamata di funzione, che consiste nel nome della funzione seguito immediatamente da una lista di argomenti tra parentesi. Gli argomenti sono espressioni che forniscono i materiali grezzi su cui opera la funzione. Quando ci sono più argomenti, questi sono separati da virgole. Se non ci sono argomenti, basta scrivere ‘()’ dopo il nome della funzione. Gli esempi che seguono mostrano chiamate di funzione con e senza argomenti:
sqrt(x^2 + y^2) un argomento atan2(y, x) due argomenti rand() nessun argomento
ATTENZIONE: Non ci dev’essere nessuno spazio tra il nome della funzione e la parentesi aperta! Un nome di funzione definita dall’utente può essere scambiata per il nome di una variabile: uno spazio renderebbe l’espressione simile alla concatenazione di una variabile con un’espressione racchiusa tra parentesi. Per le funzioni predefinite, lo spazio prima delle parentesi non crea problemi, ma è meglio non prendere l’abitudine di usare spazi per evitare errori con le funzioni definite dall’utente.
Ogni funzione richiede uno specifico numero di argomenti.
Per esempio, la funzione sqrt()
dev’essere chiamata con
un solo argomento, il numero del quale si vuole estrarre la radice quadrata:
sqrt(argomento)
Alcune delle funzioni predefinite hanno uno o più argomenti opzionali. Se questi argomenti non vengono forniti, le funzioni usano un valore di default appropriato. Vedi la sezione Funzioni predefinite per tutti i dettagli. Se sono omessi argomenti in chiamate a funzioni definite dall’utente, tali argomenti sono considerati essere variabili locali. Il valore di tali variabili locali è la stringa nulla se usate in un contesto che richiede una stringa di caratteri, e lo zero se è richiesto un valore numerico (vedi la sezione Funzioni definite dall’utente).
Come funzionalità avanzata, gawk
prevede la possibilità di
effettuare chiamate di funzione
indirette, il che permette di scegliere la funzione da chiamare al momento
dell’esecuzione, invece che nel momento in cui si scrive il codice sorgente
del programma.
Si rimanda la trattazione di questa funzionalità
a un secondo momento; si veda Chiamate indirette di funzione.
Come ogni altra espressione, la chiamata di funzione ha un valore, chiamato spesso valore di ritorno, che è calcolato dalla funzione in base agli argomenti dati. In quest’esempio, il codice di ritorno di ‘sqrt(argomento)’ è la radice quadrata di argomento. Il seguente programma legge numeri, un numero per riga, e stampa la radice quadrata di ciascuno:
$ awk '{ print "La radice quadrata di", $1, "è", sqrt($1) }' 1 -| La radice quadrata di 1 è 1 3 -| La radice quadrata di 3 è 1.73205 5 -| La radice quadrata di 5 è 2.23607 Ctrl-d
Una funzione può avere anche effetti collaterali, come assegnare
valori a certe variabili o effettuare operazioni di I/O.
Questo programma mostra come la funzione match()
(vedi la sezione Funzioni di manipolazione di stringhe)
cambia le variabili RSTART
e RLENGTH
:
{ if (match($1, $2)) print RSTART, RLENGTH else print "non uguali" }
Qui vediamo un’esecuzione di esempio:
$ awk -f matchit.awk aaccdd c+ -| 3 2 pippo pluto -| non uguali abcdefg e -| 5 1
Successivo: Precedenza, Precedente: Valori e condizioni di verità, Su: Espressioni [Contenuti][Indice]