Lo statement IF Introduzione Quasi tutti i linguaggi di programmazione utilizzano un particolare statement, detto IF, per codificare la struttura di selezione. Nei vari linguaggi lo statement può differire per la sintassi, ma la semantica è sempre la stessa. Al termine di questa dispensa: avrete appreso la sintassi e la semantica dello statement IF di Java sarete in grado di tradurre la struttura di selezione utilizzando lo statement IF.
Sintassi dello statement IF in Java La struttura di selezione viene realizzata in Java utilizzando lo statement IF la cui sintassi è: if (condizione) { istruzioni del ramo vero } else { istruzioni del ramo falso } Se mancano le istruzioni del ramo falso, la sintassi risulta semplificata nel seguente modo: if (condizione) { istruzioni del ramo vero } Non è consentito scrivere: if (condizione) else { istruzioni del ramo falso }
Semantica dello statement IF in Java Consideriamo, per cominciare, il caso più semplice. if (condizione) { istruzioni del ramo vero } * istruzione successiva all’IF Bocchi Cinzia Ultimo aggiornamento: 29/09/2011
L’esecuzione dell’istruzione avviene secondo queste modalità: 1. Viene valutata la condizione, che può restituire vero o falso. 2. Se la condizione è vera, vengono eseguite le istruzioni contenute tra le parentesi graffe (istruzioni del ramo vero). Terminata l’esecuzione delle istruzioni del ramo vero, si passa ad eseguire la prima istruzione che si incontra alla fine dello statement IF (contrassegnata con un asterisco rosso). 3. Se la condizione è falsa, si passa ad eseguire la prima istruzione che si incontra alla fine dello statement IF (contrassegnata con un asterisco rosso). Le istruzioni del ramo vero non vengono eseguite. Passiamo ora al caso completo. if (condizione) { istruzioni del ramo vero } else { istruzioni del ramo falso } * istruzione successiva all’IF L’esecuzione dell’istruzione avviene secondo queste modalità: 1. Viene valutata la condizione, che può restituire vero o falso. 2. Se la condizione è vera, vengono eseguite le istruzioni del ramo vero. Terminata l’esecuzione delle istruzioni del ramo vero, si passa ad eseguire la prima istruzione che si incontra alla fine dello statement IF (contrassegnata con un asterisco rosso). 3. Se la condizione è falsa, vengono eseguite le istruzioni contenute tra le parentesi graffe (istruzioni del ramo falso) dopo la parola chiave else. Terminata l’esecuzione delle istruzioni del ramo falso, si passa ad eseguire la prima istruzione che si incontra alla fine dello statement IF (contrassegnata con un asterisco rosso).
Errori da evitare Occorre fare molta attenzione a non inserire un punto e virgola dopo la condizione: if (condizione); { istruzioni del ramo vero } * istruzione successiva all’IF Questa situazione non è segnalata dal compilatore poiché non è un errore sintattico. Il punto e virgola corrisponde all’istruzione vuota. Se la condizione è vera, viene eseguita l’istruzione vuota e si passa poi ad eseguire le istruzioni del ramo vero che non sono considerate, però, come facenti parte dello statement IF ma come istruzione successiva all’IF. Se la condizione è falsa si passa ad eseguire le istruzioni del ramo vero, intese sempre come istruzione successiva all’IF. Bocchi Cinzia Ultimo aggiornamento: 29/09/2011
La conseguenza è che le istruzioni del ramo vero sono eseguite sempre, indipendentemente dal valore di verità della condizione. L’errore è più semplice da individuare quando si utilizza lo statement IF completo. if (condizione); { istruzioni del ramo vero } else { istruzioni del ramo falso } * istruzione successiva all’IF In tal caso, infatti, il compilatore segnala i seguenti errori: D:\Documents and Settings\Documenti\ProvaIF.java:riga m: 'else' without 'if' else ^ D:\Documents and Settings\Documenti\ProvaIF.java:riga n: class, interface, or enum expected } ^ 2 errors Procedura completata con codice di uscita 1
Cerchiamo di capire perché: Come nel caso precedente, le istruzioni del ramo vero vengono eseguite indipendentemente dal valore di verità della condizione, ma non sono considerate come facenti parte dello statement IF. Successivamente, viene trovato un else isolato (lo statement IF è terminato con il punto e virgola dopo la condizione) e, siccome non è corretto sintatticamente, viene segnalato l’errore else without if, cioè else senza if.
Bocchi Cinzia Ultimo aggiornamento: 29/09/2011
Traduzione da diagramma di flusso a codice Java
falso
condizione
if (condizione)
vero
istruzioni del ramo vero
{ }
* istruzione successiva all’IF
falso
condizione
istruzioni del ramo vero
* istruzione successiva all’IF
if (condizione)
vero
{ istruzioni del ramo falso
istruzioni del ramo vero
}
istruzioni del ramo vero
else { istruzioni del ramo falso } * istruzione successiva all’IF
* istruzione successiva all’IF
Uso delle parentesi graffe Le parentesi graffe sono obbligatorie solo quando le istruzioni del ramo vero o del ramo falso sono più di una. Potete comunque utilizzarle sempre, senza timore di commettere errori, se desiderate aumentare la leggibilità del codice.
Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
Bocchi Cinzia Ultimo aggiornamento: 29/09/2011