
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ératifs, le terme « instruction conditionnelle » est souvent utilisé, alors qu'en programmation fonctionnelle, le terme « expression conditionnelle » est préféré, parce que ces termes ont tous une signification distincte.
Siâalors(âsinon)
[modifier | modifier le code]
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 du BASIC des ordinateurs personnels des annĂ©es 1980, une instruction siâalors pouvait seulement contenir 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 fournit le mot-clé elseif et Python le mot-clé elif afin d'éviter un grand nombre de parenthÚses ou d'indentations 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]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]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 Language, 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]- Branchement
- Compilation conditionnelle
- COBOL
- Test (Unix)
- condition Yoda
- Style de programmation
- algorithme
Références
[modifier | modifier le code]- (en) Cet article est partiellement ou en totalitĂ© issu de lâarticle de WikipĂ©dia en anglais intitulĂ© « Conditional (computer programming) » (voir la liste des auteurs).
