Nella lezione precedente della nostra guida abbiamo visto come è possibile utilizzare gli operatori per svolgere operazioni con le variabili. In questa lezione analizziamo nel dettaglio cosa sono e come possiamo scrivere delle istruzioni condizionali in Java. Nello specifico passeremo in rassegna i costrutti condizionali if e switch.
if… else if… else
Il costrutto if (se) è uno dei costrutti più semplici e fondamentali dei linguaggi di programmazione. In java è semplicemente implementato in questo modo:
if (condizione) {
...
}
I puntini indicano il blocco di codice che viene eseguito se condizione è vera. Abbiamo ancora l’operatore else che si legge come altrimenti ed è utilizzato per creare istruzioni condizionali più complesse in quanto, nel nuovo esempio, avremo due istruzioni: una da eseguire se la condizione è vera, l’altra nel caso contrario.
if (condizione) {
...
} else {
...
}
L’operatore else, ancora, può essere associato nuovamente all’if creando una struttura di tipo else if come nell’esempio qui sotto:
if (condizione_1) {
... blocco_1 ...
} else if (condizione_2) {
... blocco_2 ...
}
Quest’ultimo codice si può leggere in questo modo: se (if) condizione_1 è vera esegui blocco_1; altrimenti se (else if) condizione_2 è vera esegui blocco_2.
La struttura tipica del costrutto condizionale if in Java è la seguente:
// condizione primaria
if (condizione_1) {
...
}
// condizione secondaria:
// questa condizione viene verificata solo se la prima non è risultata vera
else if (condizione_2) {
...
}
// condizione residuale:
// consiste nel comportamento da seguire se nessuna delle precedenti condizioni risulta vera
else {
...
}
Appare chiaro che si possono inserire diversi else if ma un solo else. Ad esempio:
if (condizione_1) {
...
} else if (condizione_2) {
...
} else if (condizione_3) {
...
} else if (condizione_4) {
...
} else {
...
}
Torniamo all’esempio della lezione precedente:
int x = 1;
int y = x + 1;
y += 10;
if (x == y){
System.out.println("x è uguale a y");
}
else if (y > x){
System.out.println("y è maggiore di x");
}
Ora abbiamo gli strumenti per capirne la logica: il costrutto si apre con una if, seguita (tra parentesi) dalla condizione che "x" deve essere uguale (==) a "y".
if (x == y) {
System.out.println("x è uguale a y");
}
In questo caso si potrebbero anche omettere le parentesi graffe, infatti se l’istruzione che segue è una sola non c’è bisogno di racchiudere in blocco, ma è importante che almeno agli inizi vi abituiate ad utilizzarle le parentesi graffe.
La seconda condizione, introdotta da else if, indica una alternativa nel caso in cui la prima if sia falsa. La nuova condizione sarà vera se "y" è maggiore – > – di "x" (e nel nostro esempio è così).
Switch
Nel caso si dovessero scrivere tante condizioni per una stesa variabile la soluzione implementativa migliore in Java risulta essere l’uso del costrutto switch di cui vediamo un esempio:
class ProvaSwitch{
public static void main(String args[]){
int k = 10;
switch(k){
case 5: System.out.println("k = 5");
break;
case 10: System.out.println("k = 10");
break;
case 15: System.out.println("k = 15");
break;
default: System.out.println("...default...");
}
}
}
In questo caso l’output a video sarà il seguente:
k = 10
Questo perchè nel blocco switch troviamo 4 casi, determinati dalla parola chiave case e seguiti dal valore del caso e dai due punti. Importante, dopo tutte le istruzioni prima dell’ultima, è l’istruzione break che indica al compilatore di non tenere presente cosa c’è scritto sotto e permette di andare avanti (l’uso del break dunque permette di uscire dallo switch qualora la condizione sia vera). L’ultimo caso non ha bisogno della parola chiave case perchè è la scelta predefinita (è contraddistina dalla parola default), nel caso in cui "k" non sia ne uguale a 5, ne a 10 e nemmeno a 15, pertanto, verrà eseguita l’azione prevista all’interno di quest’ultimo blocco avente funzione residuale.
Nella prossima lezione vedremo un ulteriore tipo di costrutto condizionale che prende il nome di operatore ternario ed è utilizzato, di frequente, in fase di assegnazione di una variabile.