Come abbiamo visto nel primo articolo dedicato alle procedure, a differenza delle subroutines le funzioni hanno la particolarità di ritornare uno o più valori una volta che sono state chiamate.
Ciò significa, per esempio, che se scrivo una ipotetica funzione somma in grado di ricevere due argomenti, una volta eseguito il codice all’interno della funzione, questa restituirà al codice chiamante un valore pari alla somma dei due parametri (che possiamo quindi interpretare come addendi).
Ritorno dei valori per valore
Diciamo subito che in FreeBASIC la modalità del ritorno per valore è quella di default.
Non vi è quindi la necessità di specificarla attraverso la parola-chiave byval nella dichiarazione e nella definizione della funzione.
Tipologie di restituzione
Esistono tre differenti tipologie di restituzione dei valori:
'1. usando lo stesso nome della funzione function semaforo() as string [...] semaforo = "rosso" [...] end function '2. usando la parola-chiave function function semaforo() as string [...] function = "rosso" [...] end function '3. usando la parola-chiave return function semaforo() as string [...] return "rosso" end function
La differenza tra queste tre modalità sta nel fatto che nelle prime due, una volta restituito il valore, viene comunque eseguito il resto del codice presente nella funzione, mentre, nel terzo caso, l’esecuzione della funzione termina con la restituzione del valore.
Ritorno dei valori per riferimento
Alle volte potrebbe essere utile avere il riferimento al risultato di una funzione piuttosto che il suo valore.
Avere il riferimento al risultato permette infatti al codice chiamante di modificare successivamente il valore della stessa variabile utilizzata dalla funzione per fornire il risultato conoscendone appunto il suo indirizzo di memoria.
Per scegliere questa modalità di restituzione dei valori è necessario specificarla, sia in fase di dichiarazione che in quella di definizione della funzione, attraverso la parola-chiave byref.
Vediamo un esempio direttamente tratto dalla Guida del programmatore disponibile sul sito ufficiale di FreeBASIC:
'dichiarazione della funzione declare function minimo(byref i as integer, byref j as integer) byref as integer 'dimensionamento e valorizzazione delle variabili dim as integer a = 13, b = 7 'stampa del valore originale delle variabili print a, b 'stampa del valore minimo print minimo(a, b) 'modifica del valore della variabile con valore minimo minimo(a, b) = 0 'stampa del valore delle variabili aggiornato print a, b 'definizione della funzione function minimo(byref i as integer, byref j as integer) byref as integer if i < j then return i else return j end if end function
Bene. Anche oggi abbiamo fatto un piccolo passo in avanti nella conoscenza del FreeBASIC.
A rileggerci al prossimo articolo. 🙂