1. Istruzione if else
I programmi servirebbero a poco se facessero sempre la stessa cosa, indipendentemente da come cambiano le circostanze esterne. Un programma deve sapersi adattare alle diverse situazioni ed eseguire alcune azioni in certi casi, altre — in altri.
In Java ciò è realizzato tramite l'istruzione condizionale — le parole chiave if e else, che permettono di eseguire blocchi di istruzioni diversi a seconda della veridicità della condizione.
L'istruzione condizionale è composta da tre parti: condizione, istruzione 1 e istruzione 2. Se la condizione è vera, viene eseguita l'istruzione 1, altrimenti viene eseguita l'istruzione 2. Le istruzioni non vengono mai eseguite contemporaneamente. La forma generale di questa istruzione è la seguente:
if (condizione)
istruzione1;
else
istruzione2;
if-else
if si traduce come «se», e else come «altrimenti». In linguaggio naturale si può scrivere così:
Se condizione è vera, allora
eseguire istruzione1;
altrimenti
eseguire istruzione2;
if-else in linguaggio naturale
Esempi:
// Sullo schermo verrà visualizzata la scritta: Sei ancora un bambino
int age = 17;
if (age < 18)
System.out.println("Sei ancora un bambino");
else
System.out.println("Sei già adulto");
// Sullo schermo verrà visualizzata la scritta: Fa caldo
int temperature = 5;
if (temperature < 0)
System.out.println("Fuori c'è gelo");
else
System.out.println("Fa caldo");
// Sullo schermo verrà visualizzata la scritta: Puoi sostenere l'esame per la patente
int age = 18;
if (age == 18)
System.out.println("Puoi sostenere l'esame per la patente");
else
System.out.println("Puoi risparmiare per un'auto");
2. Blocco di istruzioni
Se, al verificarsi (o al mancato verificarsi) della condizione, volete che il vostro programma esegua più istruzioni, potete raggrupparle in un blocco di istruzioni.
Per raggruppare le istruzioni in un blocco, bisogna «racchiuderle» tra parentesi graffe. Ecco come appare in generale:
{
istruzione1;
istruzione2;
istruzione3;
}
Nel blocco può esserci qualsiasi numero di istruzioni. Anche zero.
Esempi di combinazione dell'istruzione if-else e di un blocco di istruzioni:
// Sullo schermo verrà visualizzata la scritta: Sei ancora un bambino. Non discutere con gli adulti
int age = 17;
if (age < 18)
{
System.out.println("Sei ancora un bambino");
System.out.println("Non discutere con gli adulti");
}
else
{
System.out.println("Sei già adulto");
System.out.println("Eh, questa gioventù");
}
// Sullo schermo verrà visualizzata la scritta: Fa caldo
int temperature = 5;
if (temperature < 0)
{
System.out.println("Fuori c'è gelo");
System.out.println("Metti il cappello");
}
else
System.out.println("Fa caldo");
// Verrà eseguito un blocco di istruzioni vuoto. Non verrà stampato nulla a schermo.
int age = 21;
if (age == 18)
System.out.println("Puoi prendere la patente");
else
{
}
3. Sintassi abbreviata dell'istruzione if
Se il codice nel blocco else è assente, si può ometterlo. Allora l'istruzione if avrà questa forma:
if (condizione)
{
istruzione1;
}
if
Esempio:
int age = 19;
if (age >= 18)
{
System.out.println("Sei maggiorenne!");
}
Come funziona?
Se la condizione è vera, viene eseguito il blocco di codice. Se è falsa, non succede nulla — il programma prosegue.
Il blocco else nel programma c'è, ma è vuoto (tra le parentesi graffe non c'è alcuna istruzione). Si può semplicemente eliminarlo: nel programma non cambierà nulla.
4. Combinazione di condizioni: else if
A volte bisogna verificare non solo «sì/no», ma scegliere tra più opzioni. In questo caso viene in aiuto la combinazione else if:
if (condizione1)
{
// Eseguito se condizione1 è vera
}
else if (condizione2)
{
// Eseguito se condizione2 è vera e condizione1 è falsa
}
else
{
// Eseguito se nessuna delle condizioni sopra è soddisfatta
}
Esempio:
int hour = 13;
if (hour < 12)
{
System.out.println("Buongiorno!");
}
else if (hour < 18)
{
System.out.println("Buon pomeriggio!");
}
else
{
System.out.println("Buonasera!");
}
Cosa succede qui?
- Se l'orario è prima delle 12 — è mattina.
- Se è dalle 12 alle 18 — è pomeriggio.
- Se oltre — è sera.
- Il programma sceglie solo UNA delle opzioni! Non appena una condizione è soddisfatta — le altre non vengono nemmeno verificate.
5. Illustrazione schematica: diagramma di flusso della ramificazione
Ecco come appare sotto forma di diagramma di flusso:
E se ci sono più condizioni:
Questo ricorda molto i bivi nei giochi di ruolo da tavolo: vai a sinistra — una cosa, a destra — un'altra, dritto — qualcos'altro!
6. Quali condizioni si possono verificare?
Tra le parentesi tonde dopo if deve esserci un'espressione LOGICA (booleana) — il cui risultato è true o false.
Operatori di confronto principali:
| Operatore | Significato | Esempio |
|---|---|---|
|
Uguale | |
|
Diverso | |
|
Maggiore | |
|
Minore | |
|
Maggiore o uguale | |
|
Minore o uguale | |
Esempi di condizioni:
if (number == 10)
if (age != 18)
if (temperature > 36)
if (balance <= 0)
Attenzione: = (un solo segno) — è l'assegnazione. == (due segni) — è il confronto. È uno degli errori più comuni tra i principianti! Se per sbaglio scrivete:
if (x = 5) // ERRORE!
— il compilatore si lamenterà, e farà benissimo.
7. Lavorare con le stringhe nelle condizioni
Il confronto con == in Java funziona correttamente per i numeri. Per i numeri in virgola mobile è sconsigliato usare ==, e per le stringhe non si deve usare == — per le stringhe utilizzate il metodo equals(), che confronta il contenuto delle stringhe (e non i riferimenti).
Parleremo più avanti in dettaglio delle sottigliezze del confronto tra stringhe. Ecco invece come confrontare correttamente le stringhe — nell'esempio seguente:
String password = console.nextLine();
if (password.equals("qwerty")) // chiamiamo il metodo equals() e gli passiamo la seconda stringa
{
System.out.println("Sei entrato!");
}
8. Caratteristiche e sfumature:
Parentesi graffe: servono o no?
Se dopo if o else c'è una sola istruzione, le parentesi graffe si possono omettere:
if (age > 18)
System.out.println("Hai più di 18 anni!");
// Ma è più sicuro scriverle SEMPRE:
if (age > 18)
{
System.out.println("Hai più di 18 anni!");
}
Consiglio: scrivetele sempre con le graffe. Questo vi proteggerà da un sacco di errori, soprattutto quando il codice cresce.
Errori logici: fate attenzione alle condizioni!
Se scrivete così:
if (age > 18)
System.out.println("Hai più di 18 anni!");
System.out.println("Benvenuto!");
Il compilatore interpreterà questo codice così:
if (age > 18)
{
System.out.println("Hai più di 18 anni!");
}
System.out.println("Benvenuto!");
La seconda riga verrà eseguita sempre — le graffe servono perché entrambe le righe siano dentro il «ramo».
GO TO FULL VERSION