Instruction conditionnelle (programmation)

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
Diagramme de flux de Si

En informatique, une instruction conditionnelle, (aussi appelé expression conditionnelle), est une fonction d'un langage de programmation, qui effectue différents calculs ou actions, en fonction de l'évaluation d'une condition booléenne, à savoir vraie ou fausse.

Dans les langages de programmation impératives, le terme « instruction conditionnelle » est souvent utilisé, alors qu'en programmation fonctionnelle, le termes « expression conditionnelle » est préféré, parce que ces termes ont tous une signification distincte.

Si–alors(–sinon)[modifier | modifier le code]

Un organigramme de programmation de « Si-alors-sinon » (If–then–else en anglais)

La structure si–alors (parfois appelé si–alors–sinon) est commune à de nombreux langages de programmation. Bien que la syntaxe varie quelque peu selon le langage, la structure de base (sous forme de pseudocode) ressemble à ceci:

 If (condition booléenne) Then
    (conséquent)
 Else
    (alternative)
 End If

Quand un interprète trouve un Si, il attend une condition booléenne – par exemple, x > 0, ce qui signifie « la variable x contient un nombre qui est supérieur à zéro » – et évalue cette condition. Si la condition est vraie, les instructions suivant le alors sont exécutées. Dans le cas contraire, l'exécution se poursuit jusqu'au branchement suivant – soit au niveau du block sinon (qui est usuellement optionnelle), ou s'il n'y a pas de branchement sinon, alors après le fin Si.

Après qu'un branchement a été exécuté, le contrôle revient au point après fin Si.

Dans les premiers langages de programmation, en particulier certains dialectes duBASIC des ordinateurs personnels des années 1980, une instruction si–alors pouvait seulement contenir que des instructions GOTO. Cela a conduit à un style de programmation difficile à lire, connue sous le nom de programmation spaghetti, avec des programmes de ce style appelé code spaghetti. En conséquence, la programmation structurée, qui admet (virtuellement) les instructions arbitraires à l'intérieur d'une instruction si, gagne en popularité, jusqu'à ce qu'elle devienne la norme dans la plupart des programmes en BASIC. De tels mécanismes et principes ont été tirés de la famille de langages ALGOL plus âgés, mais plus avancés, et les langages ressemblant à l'ALGOL, tels des Pascal et Modula-2. Bien qu'il soit possible d'utiliser uniquement les instructions GOTO dans un si-alors pour écrire des programmes non-spaghetti, tout aussi bien structurés et lisibles que des programmes écrits dans un langage de programmation structuré, la programmation structurée rend cela plus facile, et l'applique. L'instruction structurée si-alors-sinon, comme dans l'exemple ci-dessus est l'un des éléments de la programmation structurée, et est présente dans les langages de programmation de haut niveau tels que le C, Java, JavaScript et Visual Basic.

L'instruction else, présente dans de nombreux langages, signifie que la grammaire non contextuelle est ambiguë. Plus précisément,

si a alors si b alors s sinon s2

peut être analysé comme

si a alors (si b alors s) sinon s2

ou

si a alors (si b alors s sinon s2)

selon que sinon est associé avec le premier ou le second si. Ceci est connu sous le problème portant le nom du dangling else, et est résolu de différentes manières, en fonction de son langage.

Sinon si (else if)[modifier | modifier le code]

En utilisant l'instruction sinon si, il est possible de combiner plusieurs conditions. Seuls les énoncés suivant la première condition qui se trouve être vraie seront exécutés. Toutes les autres déclarations seront ignorées. Exemple :

if condition then
   -- déclaration
elsif autre_condition then
    -- autre déclaration
elsif encore_autre_condition then
    -- encore une autre déclaration;
-- ...
else
    -- dernière déclaration;
end if;

elsif (sinon si) en Ada, est un sucre syntaxique pour else suivi de if. En Ada, la différence est qu'une seule instruction de fin end if est nécessaire si on utilise elsif au lieu de else if. PHP utilise le mot-clef elseif [1] à la fois pour sa syntaxe à accolades ou celle à points-virgules. Perl et Python, qui fournissent le mot-clé elseif (sinon si) afin d'éviter un grand nombre de parenthèses qui seraient autrement nécessaires. Certaines implémentations de BASIC, tel Visual Basic[2], disposent aussi d'un ElseIf. La syntaxe shell POSIX utilise elif[3].

Cependant, dans de nombreuses langages dérivés d'Algol, tel que Algol 68, Simula, Pascal, BCPL et C, la construction sinon si n'est pas présente. Dans les nombreux dérivés syntaxiques de C, tels que Java, ECMAScript, etc. on utilise else if et non un mot-clef elseif dédié qui serait superflu car ces langages permettent à une expression de suivre une condition sans être enfermée dans un bloc.

Expressions si–alors–sinon (if–then–else)[modifier | modifier le code]

Beaucoup de langues prennent en charge l'expression si, qui est similaire à l'instruction si, mais qui par la suite renvoie une valeur. Ainsi, il existe des expressions vraies (qui évaluent à une valeur), et non des instructions (qui modifient l'état du programme ou exercent une sorte d'action).

Instruction switch[modifier | modifier le code]

Article détaillé : Switch (instruction).

Les instructions switch permettent d'effectuer un branchement à partir de la valeur d'une variable. Dans les langages dynamiques, les switchs ne peuvent pas être limitées à des expressions constantes, et pourraient étendre le filtrage par motif.

Filtrage par motif[modifier | modifier le code]

Article détaillé : filtrage par motif.

Le filtrage par motif peut être considéré comme une alternative plus sophistiquée à la fois des si-alors-sinon, et des switchs. Il est disponible dans de nombreux langages de programmation avec des fonctionnalités de programmation fonctionnels, tels que le Wolfram Langage, ML et beaucoup d'autres. Voici un exemple simple écrit dans le langage OCaml:

 match fruit with
 | "pomme" -> cuisiner tarte
 | "noix de coco" -> cuisinier dango_mochi
 | "banane" -> mixer;;

Conditionnelles basées sur un hashage[modifier | modifier le code]

Dans les langages de programmation qui ont des tableaux associatifs, tels que Python, Perl, PHP ou Objective-C, il est idiomatique de les utiliser pour mettre en œuvre un assignement conditionnel[4].

animal = raw_input("Entrez le type d'animal que vous voulez nommer : ")
animaux_connus = {"Chien": "Fido",
              "Chat": "Meowsles",
              "Oiseau": "Tweety"}
mon_nom = animaux_connus[animal]

Prédiction de branchement[modifier | modifier le code]

Dans l'assembleur, la prédiction de branchement est une caractéristique de certains processeurs des ensembles d'instructions qui permet l'exécution conditionnelle d'instructions, sans avoir à effectuer des sauts conditionnels coûteux.

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]