Le funzioni non possono eseguire azioni. Una cosa che una funzione può fare è restituirti un valore quando la chiami. Questo valore corrisponde al risultato.
Ad esempio, quando si chiama GetRandomInt(1, 10), ci si aspetta di ottenere un numero intero casuale compreso tra 1 e 10.
Per modificare il tipo di valore desiderato dalla funzione, è necessario modificare il tipo nella firma della funzione. Ad esempio:
GetNumberOfMousetrapsYouCanAfford() : int
In questo esempio, GetNumberOfMousetrapsYouCanAfford() ha il tipo restituito int, quindi ogni volta che chiami GetNumberOfMousetrapsYouCanAfford() nel codice, puoi aspettarti che restituisca un numero intero.
GetNumberOfMousetrapsYouCanAfford() : float
D'altra parte, se modificassi il tipo in float, verrebbe restituito un tipo di valore diverso.
Quando la funzione ha specificato un tipo restituito, la funzione corpo (blocco di codice) deve produrre un risultato che corrisponda a quel tipo. In caso contrario, il codice non viene compilato, il che significa che si è verificato un errore del compilatore. Vuoi imparare come evitarlo?
Risultati e restituzioni
Il risultato è il valore che una funzione restituisce quando esegue (viene eseguita).
La lezione 2 ha trattato le parole chiave che sono parole speciali incorporate in Verse e che hanno azioni molto specifiche collegate.
In Verse, restituzione è anche una parola chiave che indica a una funzione di fornire il valore risultante dall'espressione che segue la parola chiave restituzione.
MyFunction() : int =
return 5
OnBegin<override>()<suspend> : void =
MyFunction() # result is 5
Nell'esempio precedente, questo codice restituisce un valore di 5 quando viene chiamata MyFunction().
Lasciare fuori return non interrompe la funzione, ma è buona norma includere esplicitamente return. Se vuoi saperne di più, vedi Funzioni.
Restituzioni anticipate
Quando il programma esegue un'espressione return, il programma esce subito dal blocco di codice della funzione. Ciò significa che se si posiziona l'espressione return prima di altro codice, il codice che segue non viene eseguito. Questo può essere utile per uscire da una funzione anticipata quando viene soddisfatta una determinata condizione.
La funzione seguente aggiorna la variabile Coins in base a CoinsPerMouseTrap. Tuttavia, la variabile Coins deve essere impostata su un valore positivo per acquistare una trappola per topi. Se Coins è negativo, la funzione stampa un messaggio di errore e restituisce subito perché non c'è motivo di eseguire il resto del codice nel corpo della funzione.
Infatti, senza restituzione, la funzione diminuirebbe erroneamente il valore di Coins e non indicherebbe mai che Coins è negativo.
var Coins : int = -10
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
Print(“Mousetrap bought! You have {Coins} coins left.”)
Uscire da una funzione in anticipo con return può introdurre bug, quindi è importante utilizzarlo con attenzione. Ad esempio, poiché return viene eseguito prima di Print(“Trappola per topi acquistata! Hai {Coins} monete rimaste.”) nel codice seguente, la funzione non stamperà mai il nuovo valore di Coins.
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
if (Coins < 0):
Print("Error: Coins set to negative value")
return
set Coins = Coins - CoinsPerMousetrap
return
Print("Mousetrap bought! You have {Coins} coins left.")
Se nel codice è presente un return anticipato, il codice viene comunque compilato, ma Visual Studio Code avvisa che le espressioni dopo il return non verranno eseguite.
Void per le funzioni senza risultato utile
A volte vuoi un risultato, a volte no.
Se ricordi i tipi della Lezione 2, potresti anche ricordare che ogni tipo richiede un determinato tipo di valore. L'elenco seguente è molto breve. Verse utilizza molti tipi, ma questi sono i più comuni e sono la base per l'utilizzo di variabili e costanti.
| Tipo | Che cosa fa | Valori |
|---|---|---|
| Questo tipo di valore può essere soltanto vero o falso. | vero / falso |
| Un intero è un numero intero (non una frazione) e | Numeri interi |
| Questo tipo è riservato a valori che non sono interi, ad esempio le frazioni. | Numeri con virgola decimale |
| Questo tipo è per qualsiasi tipo di testo. Possono essere lettere, numeri, segni di punteggiatura, spazi e persino emoji. 😻 | Lettere, numeri, punteggiatura, spazi, emoji |
Quando crei una funzione che non deve produrre un risultato, puoi impostare il tipo restituito della funzione su void.
Ciò significa che l'ultima espressione nel blocco di codice può produrre un risultato di qualsiasi tipo senza generare un errore del compilatore perché il tipo della funzione è impostato su void.
Puoi comunque utilizzare la parola chiave return per le funzioni che hanno un tipo void, semplicemente non è necessario fornire un valore con la parola return.
Riepilogo
Il risultato è ciò che ottieni da una funzione quando la chiami.
In un blocco di codice, l'ultima espressione produce il risultato.
Per modificare il tipo di valore in una funzione, è necessario modificare il tipo nella firma della funzione.
Restituzione è una parola chiave che indica la funzione per fornire il valore risultante dall'espressione che la segue.
Una restituzione anticipata si verifica quando la parola chiave restituzione viene utilizzata in un blocco di codice prima della fine del blocco. Ciò farà sì che il programma esca subito da quel blocco di codice senza eseguire il resto del codice nel blocco.
Void è un tipo che indica che il valore della funzione non viene utilizzato da nessun'altra parte. O forse dice che non vale la pena preoccuparsene. È possibile utilizzare il tipo vuoto per una funzione che non deve produrre un risultato.