Corso di Java

Istruzioni condizionali

 

Le istruzioni condizionali sono uno strumento importantissimo per il programmatore, perché consentono di decidere le operazioni da eseguire in funzione del verificarsi o meno di certe condizioni.
In Java esistono tre tipi di istruzioni condizionali:
1. if;
2. operatore ternario;
3. switch.

L’istruzione if utilizza un’espressione booleana per decidere se debba essere eseguita una certa istruzione (o un blocco di più istruzioni).
Il caso più semplice di istruzione if  ha la seguente sintassi:

if (espressione) {
    istruzioni
}


In questa forma, le istruzioni tra parentesi graffe vengono eseguite se il valore dell’espressione è true, altrimenti il programma esegue l’istruzione successiva all’if, ignorando le istruzioni elencate nel blocco.
Se si vogliono eseguire istruzioni differenti in base al valore dell’espressione, si può utilizzare l’istruzione if con l’opzione else:

if (espressione) {
    istruzioni1
} else {
    istruzioni2
}


Se l’espressione vale true viene eseguito il primo blocco di istruzioni, altrimenti vengono eseguite le istruzioni del blocco else.
E’ possibile annidare più istruzioni if else nella forma:

if (espressione1) {
    istruzioni1
} else if (espressione2) {
    istruzioni2
} else if (espressione3) {
    istruzioni3
}

Non appena il programma incontra il primo if controlla sequenzialmente ogni espressione, finché non ne trova una che vale true, dopodiché esegue il blocco di istruzioni relativo a tale espressione ed esce dall’istruzione if, passando alla successiva.
Ad es. se espressione2 vale true, viene eseguito il blocco istruzioni2 e non viene più valutata né espressione3, né eventuali espressioni successive ad essa, ma il programma passa il controllo all’istruzione successiva all’if.

L’operatore ternario è già stato visto nella lezione 21, e può essere utilizzato in certi casi al posto dell’istruzione if else per rendere il codice più compatto e leggibile.

L’istruzione switch viene utilizzata per eseguire istruzioni in base al valore di un’espressione di tipo intero, ed ha una sintassi del tipo:

switch(espressione) {
case valore1 : istruzioni1;
break;
case valore2 : istruzioni2;
break;
...
}

Innanzitutto l’istruzione switch valuta l’espressione ed esegue le istruzioni elencate in corrispondenza dell’istruzione case che fornisce il valore corrispondente a quello assunto dall’espressione.
Al posto dello switch si può anche usare un‘istruzione if del tipo:

if (espressione == valore1) {
istruzioni1;
} else if (espressione == valore2) {
    istruzioni2;
} else ...
}

Optare per l’una o l’altra soluzione non è solo una questione di gusti.
A parte la maggiore leggibilità di un’istruzione switch rispetto ad un’istruzione costituita da if annidate, altri fattori influenzano le scelte del programmatore.
Infatti le decisioni associate agli if possono essere usate su range di valori o condizioni, mentre un’istruzione switch può prendere decisioni solo in base ad un solo valore intero, ed ogni case deve fornire un valore unico.

Possiamo notare anche la presenza dell’istruzione break dopo ogni case: essa serve per terminare l’istruzione switch e far proseguire il flusso del programma all’istruzione seguente allo switch.
In mancanza del break vengono eseguite anche le istruzioni relative ai case successivi a quello che soddisfa la condizione (in tal caso si usa il termine fall through).
Tecnicamente il break non è necessario dopo l’ultimo case, perché il flusso passerà comunque all’istruzione successiva allo switch, ma è buona norma utilizzarlo anche in questo caso per evitare che ad una successiva aggiunta di case, ci si dimentichi di aggiungere anche il break.
Esamineremo meglio l’istruzione break in una delle prossime puntate del corso.
Infine è possibile specificare delle istruzioni di default da eseguire nel caso che nessuno dei case elencati corrispondano ad valore assunto dall’espressione; questa opzione può essere specificata aggiungendo l’istruzione default dopo l’ultimo case.
In questo caso l’istruzione switch assume la forma:

switch(espressione) {
case valore1 : istruzioni1;
break;
case valore2 : istruzioni2;
break;
    ...
    default : istruzioni;
}

Nella prossima puntata vedremo un esempio di applicazione delle istruzioni condizionali.


 

Torna all'indice Generale del corso di Corso di Java di Software Planet