Il costrutto if
Questa condizione, ci permette di prendere semplici decisioni basate su valori immagazzinati. In fase di runtime, la Java Virtual Machine testa un’espressione booleana, e a seconda che essa risulti vera o falsa esegue un certo blocco di istruzioni, oppure no. Un’espressione booleana è un’espressione che come risultato può restituire solo valori di tipo Boolean, cioè true o false. Essa di solito si avvale di operatori di confronto, e, magari, di operatori logici. La sintassi è la seguente:
if (espressione-booleana) istruzione
Se si necessita di eseguire più istruzioni si inserisce il blocco di codice all'interno di delle parentesi graffe ({ e })
if (espressione-booleana) {
// blocco di codice
}
Per esempio:
if (numeroLati==3)
println("Questo è un triangolo")
Nell’esempio, l’istruzione di stampa, sarebbe eseguita se e solo se la variabile numeroLati avesse valore 3. In quel caso l’espressione booleana in parentesi varrebbe true, e quindi sarebbe eseguita l’istruzione che segue l’espressione. Se invece l’espressione risultasse false, sarebbe eseguita direttamente la prima eventuale istruzione che segue l’istruzione di stampa.
else
Possiamo anche estendere la potenzialità del costrutto if, mediante la parola chiave else:
if (espressione-booleana) istruzione1
else istruzione2
per esempio:
if (numeroLati==3)
println("Questo è un triangolo")
else
println("Questo non è un triangolo")
Se if potremmo tradurlo con "se" , else potremmo tradurlo con "altrimenti". In pratica nell'esempio, se l’espressione booleana è vera, sarà stampata la stringa "Questo è un triangolo" , se è falsa sarà stampata la stringa "Questo non è un triangolo".
else if e if annidiati
Ci sono due modi per eseguire più controlli allo stato delle variabili e fare selezione. In questi due casi racchiudiamo il codice all'interno dei vari if/else da parentesi graffe:
if(numeroLati == 3) {
println("Questo è un triangolo")
}
else if(numeroLati == 4) {
println("Questo è un quadrilatero")
}
else {
println("Questo non è un triangolo né un quadrilatero")
}
oppure
if(numeroLati == 3) {
println("Questo è un triangolo")
}
else {
if (numeroLati == 4) {
println("Questo è un quadrilatero")
} else {
println("Questo non è un triangolo né un quadrilatero")
}
}
La differenza è minima a livello logico, ma a livello di leggibilità è alta, infatti a seconda dei casi si usa un metodo o l'altro. Da questo esempio, si può intuire che i blocchi di codice si possono mettere sia con l'if che con l'else, anche con una istruzione sola.
if in range
Vediamo una particolare caratteristica del Kotlin, ma prima premettiamo che:
- L'operatore .. serve per generare una collezione contenente un range di elementi;
- L'operatore in serve per verificare se un elemento è all'interno di una collezione.
if(numeroLati in 3..10) {
println("Questo è un poligono che ha un nome comune noto")
}
Operatore ternario
A malincuore devo dirvi che in Kotlin non esiste l'operatore ternario. L'operatore ternario, oltre ad essere molto utile per rendere codice illeggibile serviva per assegnare un valore od un'altro alla variabile in base al risultato di una condizione. Ma per fortuna il Kotlin ha previsto il rimpiazzo dell'operatore ternario, con gli if/else.
var poligiono = if(numeroLati == 3) "Questo è un triangolo"
else if(numeroLati == 4) "Questo è un quadrilatero"
else "Questo non è un triangolo né un quadrilatero"