W3docs

Java if, else et else if

Contrôlez le flux d'un programme Java avec if, else if et else, et apprenez à imbriquer les conditions proprement.

Un programme qui exécute toujours la même séquence d'instructions n'est pas très utile. if est la façon dont Java pose une question et choisit quoi faire ensuite. Combiné avec else if et else, il constitue la base de chaque décision que votre code prendra jamais.

Le if de base

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

La condition doit être une expression boolean — pas de valeurs truthy/falsy comme en JavaScript ou Python. if (1) ne compile pas ; if (count > 0) oui.

int age = 20;

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

Ajouter un else

else fournit la branche alternative — ce qui s'exécute quand la condition est false :

int age = 16;

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

Exactement une des deux branches s'exécute. Il n'y a pas de fall-through.

Enchaîner avec else if

Pour plus de deux résultats possibles, enchaînez des else if. Java vérifie chaque condition de haut en bas et exécute la première branche dont la condition est vraie ; les autres sont ignorées :

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'ordre est important. Si vous placez la condition la plus permissive en premier, elle englobe tous les cas suivants. L'exemple ci-dessus affiche C car score >= 70 est la première correspondance — même si score >= 60 serait aussi vraie si elle était vérifiée.

Les accolades sont optionnelles — mais utilisez-les

Java vous permet de supprimer les accolades quand une branche est une instruction unique :

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

Ne le faites pas. Utilisez toujours des accolades. Les deux blocs ci-dessous semblent identiques mais se comportent différemment :

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

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

Le coût des {} est de deux caractères ; le coût du bug, c'est votre week-end.

Les expressions booléennes dans if

La condition peut être tout ce qui s'évalue en boolean :

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

Notez que if est une instruction, pas une expression : elle effectue une action mais ne produit pas elle-même une valeur, vous ne pouvez donc pas écrire int x = if (...). Pour la version qui produit une valeur, utilisez l'Opérateur ternaire.

Ce dernier motif — vérification de null d'abord, puis un appel de méthode — utilise l'évaluation en court-circuit. Si user est null, user.isActive() n'est jamais invoqué. Consultez les Opérateurs logiques pour &&, || et !, et les Opérateurs de comparaison pour >, == et leurs semblables.

Imbriquer des instructions if

Vous pouvez mettre un if à l'intérieur d'un autre if. C'est parfois la façon la plus claire d'exprimer une condition :

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

Mais une imbrication profonde est difficile à lire. Les retours anticipés permettent généralement de clarifier le code :

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

Moins d'indentation, plus facile à suivre.

Erreur courante : = à la place de ==

Les débutants venant d'autres langages écrivent parfois :

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

= est l'affectation, == est la comparaison. Contrairement au C, Java rejette cela à la compilation, sauf si la variable est un boolean — car le résultat de int x = 5 est un int, pas un boolean. C'est un petit avantage que le système de types de Java vous offre gratuitement.

Un exemple complet

La chaîne else if ci-dessous convertit des scores numériques en lettres de notes. Exécutez-la et vérifiez la sortie :

java— editable, runs on the server

Elle affiche :

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

Quand utiliser switch à la place

Une longue chaîne else if qui teste une variable par rapport à une liste de valeurs fixes est souvent plus claire sous forme d'instruction switch. Utilisez if/else if quand les branches testent des expressions différentes ou utilisent des plages (comme l'exemple de notes ci-dessus) ; utilisez switch quand vous comparez une seule valeur à plusieurs constantes.

La suite

Pour les affectations conditionnelles en une ligne, l'Opérateur ternaire est souvent plus lisible qu'un if/else complet.

Pratique

Pratique
Qu'est-ce qui est affiché par ce code quand score vaut 85 ?
Qu'est-ce qui est affiché par ce code quand score vaut 85 ?
Was this page helpful?