Precedente: Parametri per valore/riferimento, Su: Chiamata di una funzione [Contenuti][Indice]
Alcune implementazioni di awk
consentono di chiamare una
funzione che non è stata definita.
Viene solo emesso un messaggio che descrive il problema al momento
dell’esecuzione, se il programma tenta di chiamare quella funzione.
Per esempio:
BEGIN { if (0) pippo() else pluto() } function pluto() { … } # si noti che `pippo' non è definito
Poiché la condizione dell’istruzione ‘if’ non risulterà mai verificata
in questo caso,
non è un problema reale il fatto che
che pippo()
non sia stato definito. Solitamente, tuttavia,
è un problema se un programma chiama una funzione indefinita.
Se si specifica l’opzione --lint
(vedi la sezione Opzioni sulla riga di comando),
gawk
elenca le chiamate a funzioni indefinite.
Alcune implementazione di awk
emettono un messaggio di errore
se si usa l’istruzione next
o nextfile
(vedi la sezione L’istruzione next
, e
vedi la sezione L’istruzione nextfile
)
all’interno di una funzione definita dall’utente.
gawk
non ha questa limitazione.
È possibile chiamare una funzione specificando parametri in più rispetto a quelli che la funzione si aspetta, come p.es.:
function pippo(p1, p2) { … } BEGIN { pippo(1, 2, 3, 4) }
Fare questo, tuttavia, è una pratica sconsigliata. La funzione chiamata
potrebbe fare qualsiasi cosa con i valori ulteriori che le vengono passati,
quindi awk
calcola le espressioni richieste, per poi non
utilizzarle affatto.
È inoltre ancora più importante notare che una simile chiamata di funzione può essere causa di confusione per la persona che potrebbe leggere in seguito il programma in questione.64 I parametri di una funzione sono generalmente elementi dell’input che influenzano l’elaborazione eseguita dalla funzione. Chiamare una funzione con più parametri del necessario potrebbe comunicare la falsa impressione che quei valori siano importanti per la funzione, mentre in realtà non lo sono affatto.
Poiché questa pratica non è affatto raccomandabile, gawk
manda sempre un messaggio di avvertimento quando si trova a
eseguire una tale chiamata di funzione. (Se non si vuole ricevere
il messaggio, occorre modificare il codice! In fondo, non è
corretto).
Questa persona potresti anche essere tu, dopo qualche tempo, e a quel punto ti domanderesti “cosa stavo pensando?!?”
Precedente: Parametri per valore/riferimento, Su: Chiamata di una funzione [Contenuti][Indice]