Le funzioni e le procedure in Kotlin
Per creare una funzione o una procedura in Kotlin utilizzo la parola fun()
fun nome() {
...
}
Se la funzione restituisce un risultato in output devo indicare anche il tipo di dato in output del valore di ritorno e usare l'istruzione return nel blocco di codice.
fun nome() :tipodato {
...
return valorediritorno
}
In entrambi i casi nome è il nome della funzione o della procedura.
Gli argomenti in input della funzione vanno messi tra le parentesi tonde e separati tra loro da una virgola, mentre le istruzioni tra le parentesi graffe.
Nota. Se la funzione non ha argomenti devo comunque aggiungere le parentesi tonde dopo il nome della funzione.
Al nome di ogni argomento va aggiunto il simbolo dei due punti (:) seguito dal tipo di dato (Int, String, ecc. ).
Lo stesso va fatto per l'eventuale valore di ritorno della funzione.
Un esempio pratico
Esempio 1 (procedura)
Scrivo un programma che richiama una funzione. Si tratta più propriamente di una procedura perché non restituisce valori di ritorno alla funzione chiamante.
fun main() {
stampa("Hello", 2019)
}
fun stampa(messaggio: String, anno: Int) {
println(messaggio+" "+anno)
}
La funzione main() richiama la funzione stampa() passandogli una stringa("Hello") e un intero (2019).
La funzione stampa() riceve la chiamata e salva i parametri nelle variabili locali messaggio e anno.
Poi concatena e stampa un messaggio a video.
Hello 2019
E' un esempio di funzione in linguaggio Kotlin.
Nota. Le variabili messaggio e anno sono variabili locali. Al termine della funzione sono cancellate dalla memoria del programma. Pertanto, non possono essere lette dalla funzione chiamante main(). Nell'esempio seguente provo a superare questo ostacolo.
Esempio 2 (funzione)
Per definire una funzione che restituisce un valore di ritorno alla funzione chiamante, indico il tipo di dato di output.
In questo caso è una stringa.
fun main() {
val stringa: String
stringa=stampa("Hello", 2019)
println(stringa)
}
fun stampa(messaggio: String, anno: Int): String {
val valore: String
valore=messaggio+" "+anno
return valore
}
Poi aggiungo l'istruzione return nel blocco delle istruzione per restituire il valore di ritorno (valore) alla funzione chiamante.
La funzione chiamante riceve il valore di ritorno è lo assegna alla variabile stringa. Poi lo stampa.
Il risultato in output è sempre lo stesso
Hello 2019
In questo caso, però, il risultato finale della funzione viene passato alla funzione chiamante.
E così via.