W3docs

Java if, else e else if

Controlla il flusso del programma in Java con if, else if ed else e impara a nidificare le condizioni in modo pulito.

Un programma che esegue sempre la stessa sequenza di istruzioni non è molto utile. if è il modo in cui Java pone una domanda e sceglie cosa fare dopo. Insieme a else if e else, forma la spina dorsale di ogni decisione che il tuo codice dovrà mai prendere.

Il if di base

if (condition) {
  // runs only when condition is true
}

La condizione deve essere un'espressione boolean — nessun valore truthy/falsy come in JavaScript o Python. if (1) non compila; if (count > 0) sì.

int age = 20;

if (age >= 18) {
  System.out.println("You can vote.");
}

Aggiungere un else

else fornisce il ramo alternativo — ciò che viene eseguito quando la condizione è false:

int age = 16;

if (age >= 18) {
  System.out.println("You can vote.");
} else {
  System.out.println("Too young to vote.");
}

Esattamente uno dei due rami viene eseguito. Non c'è fall-through.

Concatenare con else if

Per più di due risultati, concatena else if. Java controlla ogni condizione dall'alto verso il basso ed esegue il primo ramo la cui condizione è vera; il resto viene saltato:

int score = 72;

if (score >= 90) {
  System.out.println("A");
} else if (score >= 80) {
  System.out.println("B");
} else if (score >= 70) {
  System.out.println("C");
} else {
  System.out.println("F");
}

L'ordine è importante. Se metti la condizione più permissiva per prima, essa assorbe tutti i casi successivi. L'esempio sopra stampa C perché score >= 70 è la prima corrispondenza — anche se score >= 60 sarebbe anch'essa vera se venisse controllata.

Le graffe sono opzionali — ma usale

Java ti permette di omettere le graffe quando un ramo è una singola istruzione:

if (loggedIn)
  showDashboard();
else
  showLogin();

Non farlo. Usa sempre le graffe. Le due righe seguenti sembrano uguali ma si comportano diversamente:

if (loggedIn)
  showDashboard();
  logActivity();        // ALWAYS runs — not part of the if!

if (loggedIn) {
  showDashboard();
  logActivity();        // both inside the if
}

Il costo di {} è due caratteri; il costo del bug è il tuo weekend.

Espressioni boolean dentro if

La condizione può essere qualsiasi cosa che valuti a boolean:

if (x > 0 && x < 100) { ... }
if (name.equals("admin")) { ... }
if (!list.isEmpty()) { ... }
if (user != null && user.isActive()) { ... }

Nota che if è un'istruzione, non un'espressione: esegue un'azione ma non produce essa stessa un valore, quindi non puoi scrivere int x = if (...). Per la versione che produce un valore, usa l'Operatore Ternario.

L'ultimo pattern — prima il controllo null, poi una chiamata al metodo — usa la valutazione a corto circuito. Se user è null, user.isActive() non viene mai invocato. Vedi Operatori Logici per &&, || e !, e Operatori di Confronto per >, == e simili.

Nidificare le istruzioni if

Puoi mettere un if all'interno di un altro if. A volte è il modo più chiaro per esprimere una condizione:

if (user != null) {
  if (user.isAdmin()) {
    System.out.println("Welcome, admin.");
  } else {
    System.out.println("Welcome, user.");
  }
} else {
  System.out.println("Please log in.");
}

Ma la nidificazione profonda è difficile da leggere. I return anticipati di solito semplificano il codice:

if (user == null) {
  System.out.println("Please log in.");
  return;
}
if (user.isAdmin()) {
  System.out.println("Welcome, admin.");
  return;
}
System.out.println("Welcome, user.");

Meno indentazione, più facile da seguire.

Errore comune: = invece di ==

I principianti che arrivano da altri linguaggi a volte scrivono:

if (x = 5) { ... }   // compile error

= è l'assegnazione, == è il confronto. A differenza di C, Java rifiuta questo a tempo di compilazione a meno che la variabile non sia un boolean — perché il risultato di int x = 5 è un int, non un boolean. È una piccola grazia che il sistema di tipi di Java ti offre gratuitamente.

Un esempio pratico

La catena else if qui sotto converte punteggi numerici in voti letterali. Eseguila e verifica l'output:

java— editable, runs on the server

Stampa:

95 -> A
82 -> B
71 -> C
68 -> D
45 -> F

Quando usare switch invece

Una lunga catena else if che testa una variabile rispetto a un elenco di valori fissi è spesso più chiara come istruzione switch. Usa if/else if quando i rami testano espressioni diverse o usano intervalli (come l'esempio dei voti sopra); usa switch quando confronti un singolo valore con diverse costanti.

Cosa c'è dopo

Per assegnazioni condizionali su una riga, l'Operatore Ternario è spesso più leggibile di un if/else completo.

Pratica

Pratica
Cosa viene stampato da questo codice quando score è 85?
Cosa viene stampato da questo codice quando score è 85?
Was this page helpful?