Programmation Java/Conditions

En Java, les séquences d'instructions if...else et switch..case permettent de formuler des traitements conditionnels.

Instructions if...else

modifier

L'instruction if permet d'exécuter une instruction (ou un bloc d'instructions) si une condition est remplie. La condition est une expression booléenne dont le résultat est de type boolean.

if (condition)
	// instruction à exécuter

L'instruction else complète l'instruction if. Elle permet d'exécuter une instruction si la condition indiquée par le if n'est pas remplie :

if (condition)
	// instruction à exécuter
else
	// instruction à exécuter si la condition n'est pas remplie

Exemple :

if (a > 10) System.out.println("A est plus grand que 10.");
else System.out.println("A ne dépasse pas 10.");

Pour plusieurs instructions, il faut les regrouper avec des accolades :

if (condition) 
{
	// instructions à exécuter
}
else
{
	// instructions à exécuter si la condition n'est pas remplie
}

On peut aussi enchaîner les tests conditionnels les uns à la suite des autres :

if (condition1)
{
	// bloc1
}
else if (condition2)
{
	// bloc2
}
else
{
	// bloc3
}

Pour une meilleure compréhension du code, il est recommandé que la condition dans le if soit positive et simplifiée.

À éviter Recommandé
public void ouvrirFichier(boolean mode_local)
{
	if (!mode_local)
	{
		// pas en mode local ...
	}
	else
	{
		// en mode local ...
	}
}
public void ouvrirFichier(boolean mode_local)
{
	if (mode_local)
	{
		// en mode local ...
	}
	else
	{
		// pas en mode local ...
	}
}
if (! (mode != OPEN || !can_read) )
{
	// Condition difficile à comprendre ...
	// 
}
if (mode == OPEN && can_read)
{
	// Condition plus facile à comprendre :
    //    si mode vaut OPEN et autorisé à lire
}

Pareillement, les variables booléennes devraient évaluer une condition positive plutôt que négative.

À éviter Recommandé
boolean pas_d_ouverture = mode != OPEN || !can_read
if (pas_d_ouverture)
{
	// pas d'ouverture possible
}
boolean ouverture = mode == OPEN && can_read
if (!ouverture)
{
	// pas d'ouverture possible
}

Instructions switch...case

modifier

La séquence d'instructions switch permet d'exécuter différentes instructions (ou blocs d'instructions) en fonction d'une liste de cas. L'instruction default permet de définir un cas par défaut.

switch (expression)
{
	case constante1:
		// instructions à exécuter
		break;
	case constante2:
		// instructions à exécuter
		break;
	case constante3:
	case constante4:
		// instructions à exécuter pour les deux constantes
		break;
	// ...
	default:
		// instructions à exécuter
		break;
}

L'instruction break sert à sortir du test. Dans le cas contraire, les instructions du case suivant seraient également exécutées, ce qui est utile pour traiter plusieurs cas de la même façon. Pour plus de précision, voir la section suivante (itération).

Remarque : le dernier break est facultatif (qu'il s'agisse de la clause default dans le cas précédent, ou d'une clause case). Cependant ajouter ce dernier break améliore la maintenabilité du code en cas d'ajout d'un nouveau cas (case ou default) ou de déplacement du dernier cas.

 

L'instruction switch ne fonctionne que sur des types simples : int, short, byte et char, ainsi que sur les wrappers correspondants (Integer, Short, Byte et Character). Depuis JDK 6 on compte aussi le type énumération (enum), et depuis JDK 7 le String (mais pas sur OpenJDK 1.7).