Fondamenti di Informatica: istruzioni condizionali 'if' e 'if-else' in Java

Slide da eCampus Università su Fondamenti di Informatica. Il Pdf, pensato per studenti universitari di Informatica, illustra le istruzioni condizionali 'if' e 'if-else' in Java, con esempi di sintassi e l'uso dei blocchi di codice.

See more

9 Pages

Fondamenti di Informatica
Istruzione if
Prof. Giuseppe Tradigo
giuseppe.tradigo@uniecampus.it
1
Corso di Laurea: Ingegneria Informatica
Insegnamento: Fondamenti di Informatica
Numero lezione: 21
Titolo: Istruzioni if e switch
L'istruzione if
Quando si desidera eseguire un'istruzione al verificarsi di una certa condizione, si utilizza
l'istruzione if (in italiano “se”).
Ad esempio, se si vuole visualizzare il messaggio solamente se il valore della variabile intera
i sia minore di un certo valore (ad es. 10), si scrive:
if (i < 10)
System.out.println(“i minore di 10”);
altre istruzioni ...
...
che si legge “se i è minore di 10 allora stampa… ecc”.
L'istruzione if accetta come argomento un valore booleano (condizione dell’if) racchiuso tra
parentesi tonde, che può anche essere il risultato di una espressione. Se il suo valore di
verità:
vale true viene eseguita l'istruzione nel corpo dell’if (dove c’è l’indentazione)
altrimenti il controllo salta all'istruzione immediatamente successiva (sopra indicato
con altre istruzioni).
Sintassi dell’istruzione if
La sintassi formale dell'istruzione if in Java è:
if (valore-booleano) istruzione1 [ else istruzione2 ];
2
Corso di Laurea: Ingegneria Informatica
Insegnamento: Fondamenti di Informatica
Numero lezione: 21
Titolo: Istruzioni if e switch
condizione dell’if
corpo dell’if
indentazione

Unlock the full PDF for free

Sign up to get full access to the document and start transforming it with AI.

Preview

e CAMPUS UNIVERSITÀ

Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria Fondamenti di Informatica Istruzione if Prof. Giuseppe Tradigo giuseppe.tradigo@uniecampus.it C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co)- C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 1e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria

L'istruzione if

Quando si desidera eseguire un'istruzione al verificarsi di una certa condizione, si utilizza l'istruzione if (in italiano "se"). Ad esempio, se si vuole visualizzare il messaggio solamente se il valore della variabile intera i sia minore di un certo valore (ad es. 10), si scrive: condizione dell'if if (i < 10) System. out . println("i minore di 10") ;] corpo dell'if altre istruzioni indentazione . che si legge "se i è minore di 10 allora stampa ... ecc". L'istruzione if accetta come argomento un valore booleano (condizione dell'if) racchiuso tra parentesi tonde, che può anche essere il risultato di una espressione. Se il suo valore di verità:

  • vale true viene eseguita l'istruzione nel corpo dell'if (dove c'è l'indentazione)
  • altrimenti il controllo salta all'istruzione immediatamente successiva (sopra indicato con altre istruzioni).

Sintassi dell'istruzione if

La sintassi formale dell'istruzione if in Java è: if (valore-booleano) istruzione1 [ else istruzione2 ]; C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co) - C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 2e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria dove la valutazione di valore-booleano controlla l'esecuzione di istruzione1 ed istruzione2: se valore-booleano vale true viene eseguita istruzione1, altrimenti viene eseguita istruzione2. La parte else, che vedremo fra poco, è opzionale.

Else

Nella sua forma semplice (ovvero senza condizioni), la parte else dell'istruzione if viene eseguita, quando presente, se la condizione dell'if non è verificata. Nell'esempio della sezione precedente è stato omesso il ramo else. Questo è possibile perché in Java, così come nella quasi totalità dei linguaggi di programmazione, la parte else è opzionale (così come indicato dalle parentesi quadre della sintassi vista sopra). Modifichiamo ora l'esempio precedente, aggiungendo un ramo else semplice: if (i < 10) System.out.println("i minore di 10"); else System. out.println("i maggiore o uguale a 10"); In questo modo abbiamo esaurito tutta la casistica, coprendo sia il caso di i strettamente minore di 10 (ovvero tutti i valori negativi e i valori da 0 a 9) col ramo if, e sia il caso di i maggiore o uguale a 10 col ramo else. Anche il ramo else potrebbe avere delle condizioni, espresse con un altro if. In questo modo possiamo avere più opzioni di controllo. Ad esempio, se volessimo filtrare delle persone per età, potremmo scrivere: if (anni <= 18) System. out.println("minorenne"); else if (anni<70) System. out.println ("adulto"); else System.out.println("anziano"); C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co)- C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 3e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria Naturalmente è soltanto un esempio che serve solo per intuire il funzionamento dell'istruzione if-else. In questo caso, se la prima condizione è verificata (cioè l'età è minore o uguale a 18) gli altri due rami else non saranno proprio valutati e verrà stampato a video solo il messaggio "minorenne". Se invece la condizione non fosse verificata, si passerebbe a verificare la condizione del primo else (ovvero età minore strettamente di 70). Anche qui, se la condizione è verificata, viene stampato a video solo "adulto". Per tutti i valori che non ricadono in questi due casi, interviene il ramo else. Quindi il ramo else è sempre alternativo al ramo if, in dipendenza della condizione.

Blocchi di codice

Nell'istruzione if una sola istruzione dipende dal valore booleano "i<100": if (i< 100) System.out.println("minore di 100"); System.out.println("istruzione successiva"); L'istruzione successiva, quella che stampa "istruzione successiva", viene eseguita indipendentemente dal risultato della condizione dell'if. Da notare, ovviamente, che nulla di quello che abbiamo detto dipende dalla rappresentazione grafica che abbiamo fatto utilizzando l'indentazione del codice. Per il compilatore Java, infatti, il seguente codice è esattamente identico e produrrà gli stessi effetti in termini di bytecode, di quello precedente: if (i< 100) System.out.println("minore di 100"); System.out.println ("istruzione successiva"); C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co)-C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 4e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria O ancora: if (i< 100) System.out.println("minore di 100"); System. out.println("istruzione successiva"); La sequenza di caratteri "istruzione successiva" in questi ultimi due casi sarà stampata qualsiasi sia la condizione dell'if. Possiamo dire esattamente la stessa cosa dell'istruzione successiva alla clausola else della porzione di codice seguente: if (i < 10) System.out.println("i minore di 10"); else System. out.println("i maggiore o uguale a 10"); System. out. println("istruzione successiva"); L'ultima visualizzazione viene eseguita indipendentemente dal fatto che i sia minore (ramo if) o maggiore o uguale (ramo else) a 10. Come fare quindi per avere più controllo? Supponiamo, ad esempio nel ramo else, di dover eseguire più istruzioni e non una sola. Ad esempio di dover aggiornare il valore di una variabile booleana per ricordarci se i era maggiore o uguale a 10 oppure no. In questo caso ci serve un modo per raggruppare le istruzioni (che abbiamo già incontrato nel metodo main e nella definizione di classe) ovvero un blocco di codice. Un blocco di codice è un insieme di istruzioni racchiuse tra parentesi graffe "{" e "}". 5 C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co) - C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.ite CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria Vediamo come possiamo usarle con l'esempio proposto poco fa. Esempio. boolean iMaggioreDi10; if (i < 10) { System.out.println("i minore di 10"); iMaggioreDi10 = false; } else { System. out.println("i maggiore o uguale a 10"); iMaggioreDi10 = true; } System. out.println("istruzione successiva"); In questo modo posso decidere quante e quali istruzioni eseguire all'interno di ciascun ramo dell'istruzione if-else. Da notare che le Coding Conventions di Java consigliano di usare sempre i blocchi di codice per le istruzioni if, in modo da aumentare la leggibilità e ridurre le possibilità di errore dovute ad errate indentazioni del codice o ai problemi che illustreremo nella prossima sezione che descrive le istruzioni if annidate.

if annidati

If è essa stessa un'istruzione, per cui, come da sintassi generale data nelle sezioni precedenti, può comparire all'interno di un'altra istruzione if. Quando ciò accade, si parla di if annidati. Esempio. if (i < 5) if (i > 0) System. out.println("numero positivo minore di 5"); C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co)- C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 6e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria È importante notare come la seconda condizione (i > 0) venga valutata se e solo se la prima (i < 5) viene valutata come vera. Quindi, se anche la seconda risulta vera, verrà stampata a video la frase tra virgolette. Se aggiungessimo al nostro esempio anche un ramo else avremmo qualcosa del tipo: if (i < 5) if (i > 0) System. out.println("numero positivo minore di 5"); else System. out.println("minore o uguale a 0"); Anche qui, in assenza di blocchi, ci troviamo in difficoltà, ovvero, potrebbero verificarsi due casi, indipendentemente dall'indentazione del codice (che abbiamo visto essere ignorata dal compilatore):

  1. il ramo else è riferito al primo if
  2. il ramo else è riferito all'if più vicino (in questo caso il secondo)

L'indentazione scelta fa intuire la risposta corretta. Nel caso del linguaggio Java, in assenza di blocchi di codice, il ramo else si riferisce sempre all'if più vicino. Questa regola non è fissa e potrebbe essere differente in altri linguaggi di programmazione. Vediamo quindi come fare in modo che l'else si riferisca al primo if, usando i blocchi di codice: if (i < 5) { if (i > 0) System.out.println("numero positivo minore di 5"); C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co)- C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 7e CAMPUS UNIVERSITÀ Corso di Laurea: Ingegneria Informatica Insegnamento: Fondamenti di Informatica Numero lezione: 21 Titolo: Istruzioni if e switch Ingegneria } else System.out.println("minore o uguale a 0"); Di nuovo, qui l'indentazione che facciamo noi non vuol dire nulla, serve solo a noi per leggere meglio il codice. Quello che conta sono le regole sintattiche di Java. In questo modo abbiamo imposto che l'else non si riferisca all'if più vicino (il secondo) ma al primo. Complichiamo ora un po' il nostro esempio per allargare la casistica dei messaggi. Esempio. if (i < 5) if (i > 0) System.out.println("numero minore di 5 maggiore di zero"); else System.out.println("numero minore o uguale a 0"); else if (i == 5) System. out.println("numero uguale a 5"); else System.out.println("numero maggiore di 5"); Qui, a differenza di prima, non c'è ambiguità perché il primo else è associato al secondo if. Per cui il secondo else è chiaro che sia associato all'if più esterno (ovvero il primo).

Operatore ternario

C'è un'altra forma alternativa al costrutto if ... else ... che produce gli stessi risultati ma che ha una forma più contratta e richiede meno codice da scrivere. In casi particolari può essere preferibile perché produce codice più facile da leggere. L'operatore di cui parliamo viene chiamato operatore ternario ed ha la seguente forma: condizione ? valore1 : valore2 dove: C 2007 - 2016 Università degli Studi eCampus - Via Isimbardi 10 - 22060 Novedrate (Co) - C.F. 9002752130 - Tel: 031.79421 - Fax: 031.7942501 - Mail: info@uniecampus.it 8

Can’t find what you’re looking for?

Explore more topics in the Algor library or create your own materials with AI.