In Kotlin, la programmazione condizionale viene prioritariamente assegnata a due costrutti:
- if-else if-else per gestire una generica attività decisionale;
- when, equivalente al più classico switch-case.
Il costrutto if-else if-else
Questo costrutto indica quale blocco di codice deve essere eseguito in dipendenza
di un'espressione booleana, da valutare sfruttando i medesimi operatori di confronto e logici del linguaggio Java.
In questo primo esempio, vediamo l'impiego di un if
seguito dal corrispondente else
:
val votoFinale=8
if (votoFinale>=6)
println("Sei stato PROMOSSO")
else
println("Purtroppo ti hanno BOCCIATO")
All'esecuzione verrà stampato "Sei stato PROMOSSO" in quanto la variabile votoFinale ha
un valore maggiore o uguale a 6. Supponiamo che l'esame sia più articolato, composto da una prova
scritta ed una orale, e che le regole d'esame siano le seguenti: se entrambe sono state passate
c'è la promozione immediata e viene pubblicata la media conseguita, se una delle due soltanto è stata fallita
la si potrà ripetere, infine il mancato superamento di entrambe comporterà la bocciatura immediata:
val votoScritto=3
val votoOrale=9
if (votoScritto>=6 && votoOrale>=6)
{
println("Sei stato PROMOSSO con la media del ${(votoScritto.toFloat()+votoOrale)/2}")
}
else if (votoScritto<6 && votoOrale>=6)
println("Prova scritta non superata...puoi ritentarla")
else if (votoScritto>=6 && votoOrale<6)
println("Prova orale non superata...puoi ritentarla")
else
println("Esame del tutto insufficiente. Sei BOCCIATO")
Un aspetto estremamente interessante del costrutto if
consiste nella possibilità di restituire un
valore, un pò come se si trattasse di una funzione. Ad esempio, possiamo riproporre in questo
senso l'esempio precedente facendo in modo che una stringa venga impostata con il giudizio finale in base
all'esito dei confronti eseguiti:
val votoScritto=8
val votoOrale=9
val risultato=if (votoScritto>=6 && votoOrale>=6)
{
val media = (votoScritto.toFloat() + votoOrale) / 2
"Sei stato PROMOSSO con la media del ${media}"
}
else if (votoScritto<6 && votoOrale>=6)
"Prova scritta non superata...puoi ritentarla"
else if (votoScritto>=6 && votoOrale<6)
"Prova orale non superata...puoi ritentarla"
else
"Esame del tutto insufficiente. Sei BOCCIATO"
println(risultato)
Ogni blocco di codice termina con un'espressione che sarà restituita nella variabile
risultato cui viene assegnato come risultato l'esito dell'intero costrutto if
.
Il costrutto when
Il costrutto when
prende il posto del più comune switch-case, ma con una sintassi "rimodernata".
Vediamo un primo esempio:
val numero = 54
val resto = numero % 2
when (resto) {
0 -> println("Numero PARI")
1 -> println("Numero DISPARI")
}
La parola chiave when
riceve tra parentesi quadre una variabile da valutare e nel blocco di
codice che segue vengono elencati i suoi possibili valori ed il codice corrispondente da eseguire.
Nel caso in cui si voglia fornire un caso di default da prendere in considerazione quando nessuno dei valori
precedenti corrisponda si può usare la parola chiave else
:
val semaforo="VERDE"
val risultato=when (semaforo) {
"ROSSO" -> "Fermati"
"GIALLO" -> "Rallenta...dovrai fermarti"
"VERDE" -> "Passa pure"
else -> "Valore errato"
}
println(risultato)
Nel precedente esempio, si vede inoltre come anche il costrutto when
sia in grado di restituire
un valore infatti ogni caso previsto specifica cosa sarà assegnato alla variabile risultato.
In tale situazione inoltre - quando usiamo il risultato del when
- l'utilizzo di else
diventa
obbligatorio in modo che si abbia in ogni caso un valore valido.
Il costrutto when
si distingue per la particolare varietà delle opzioni sfruttabili. Si può
infatti utilizzare una virgola per separare valori cui corrisponderà la medesima azione o usare
l'operatore in
per determinare un range di possibili valori:
val voto=3
val risultato=when(voto)
{
in 0..4 -> "Gravemente insufficiente"
5 -> "Insufficiente"
in 6..8 -> "Buono"
9, 10 -> "Ottimo"
else -> "Valore non valido"
}
println(risultato)
Così facendo si avrà come risultato "Gravemente insufficiente" per voti compresi tra 0 e 4, "Insufficiente" per il 5,
"Buono" nel caso in cui il voto equivalga a 6,7 o 8, "Ottimo" per il 9 e 10 mentre per qualsiasi altro
valore verrà restituito il messaggio "Valore non valido"