Pour les fonctions d’analyseur conditionnel de Wikipedia, voir Help:Conditional expressions
En informatique , les conditions (c’est-à-dire les instructions conditionnelles , les expressions conditionnelles et les constructions conditionnelles ) sont des commandes de langage de programmation permettant de gérer les décisions. Plus précisément, les conditions effectuent différents calculs ou actions selon qu’une condition booléenne définie par le programmeur est évaluée comme vraie ou fausse. En termes de flux de contrôle , la décision est toujours obtenue en modifiant sélectivement le flux de contrôle en fonction de certaines conditions (en dehors du cas de la Prédication de branche ).
Bien que la répartition dynamique ne soit généralement pas classée comme une construction conditionnelle, c’est une autre façon de sélectionner entre les alternatives au moment de l’ exécution .
Terminologie
Dans les langages de programmation impératifs , le terme « instruction conditionnelle » est généralement utilisé, alors qu’en programmation fonctionnelle , les termes « expression conditionnelle » ou « construction conditionnelle » sont préférés, car ces termes ont tous des significations distinctes.
Si–alors(–sinon)
La if–thenconstruction (parfois appelée if–then–else) est commune à de nombreux langages de programmation. Bien que la syntaxe varie d’une langue à l’autre, la structure de base (sous forme de pseudocode ) ressemble à ceci :
If ( condition booléenne ) Then ( conséquent ) Else ( alternative ) End If
Par example:
Si stock = 0 Alors message = commander du nouveau stock Sinon message = il y a du stock Fin Si
Dans l’exemple de code ci-dessus, la partie représentée par (condition booléenne) constitue une expression conditionnelle , ayant une valeur intrinsèque (par exemple, elle peut être remplacée par l’une des valeurs Trueou False) mais n’ayant aucune signification intrinsèque. En revanche, la combinaison de cette expression, du Ifet qui l’ Thenentoure, et du conséquent qui suit par la suite constitue un énoncé conditionnel , ayant une signification intrinsèque (par exemple, exprimant une règle logique cohérente) mais aucune valeur intrinsèque.
Lorsqu’un interpréteur trouve un If, il attend une condition booléenne – par exemple, x > 0, ce qui signifie “la variable x contient un nombre supérieur à zéro” – et évalue cette condition. Si la condition est true, les instructions qui suivent thensont exécutées. Sinon, l’exécution continue dans la branche suivante – soit dans le else bloc (qui est généralement facultatif), soit s’il n’y a pas de elsebranche, alors après le end If.
Après l’exécution de l’une des branches, le contrôle revient au point après le end If.
Histoire et développement
Dans les premiers langages de programmation, en particulier certains dialectes du BASIC dans les ordinateurs personnels des années 1980 , une if–theninstruction ne pouvait contenir que des GOTOinstructions (équivalentes à une instruction de branchement ). Cela a conduit à un style de programmation difficile à lire connu sous le nom de programmation spaghetti , avec des programmes de ce style appelés code spaghetti . En conséquence, la programmation structurée , qui permet de placer des instructions (virtuellement) arbitraires dans des blocs d’instructions à l’intérieur d’une ifinstruction, a gagné en popularité, jusqu’à ce qu’elle devienne la norme même dans la plupart des cercles de programmation BASIC. Ces mécanismes et principes étaient basés sur l’ ALGOL plus ancien mais plus avancéfamille de langages et les langages de type ALGOL tels que Pascal et Modula-2 ont influencé les variantes BASIC modernes pendant de nombreuses années. Bien qu’il soit possible, en utilisant uniquement des GOTOinstructions dans if–thendes instructions, d’écrire des programmes qui ne sont pas du code spaghetti et qui sont tout aussi bien structurés et lisibles que des programmes écrits dans un langage de programmation structuré, la programmation structurée facilite et applique cela. Les instructions structurées if–then–elsecomme l’exemple ci-dessus sont l’un des éléments clés de la programmation structurée, et elles sont présentes dans les langages de programmation de haut niveau les plus populaires tels que C , Java , JavaScript et Visual Basic .
Le problème de “l’autre pendant”
Le elsemot-clé est conçu pour cibler une if–theninstruction spécifique qui le précède, mais pour les instructions imbriquées if–then , les langages de programmation classiques tels que ALGOL 60 ont eu du mal à définir quelle instruction spécifique cibler. Sans limites claires pour quelle instruction est laquelle, un elsemot-clé pourrait cibler n’importe quelle if–theninstruction précédente dans le nid, telle qu’elle est analysée.
si a alors si b alors s sinon s2
peut être analysé comme
si a alors ( si b alors s) sinon s2
ou alors
si a alors ( si b alors s sinon s2)
selon que le elseest associé au premier ifou au second if. Ceci est connu sous le nom de problème du reste suspendu et est résolu de différentes manières, selon la langue (généralement via l’ end ifinstruction ou les {…}crochets).
Sinon si
En utilisant else if, il est possible de combiner plusieurs conditions. Seules les instructions suivant la première condition trouvée vraie seront exécutées. Toutes les autres déclarations seront ignorées.
if condition then –instructions elseif condition then — plus d’instructions elseif condition then — plus d’instructions ; … else — autres déclarations ; fin si ;
Par exemple, pour une boutique offrant jusqu’à 30 % de remise sur un article :
if discount < 11 % then print ( vous devez payer 30 $ ) elseif discount < 21 % then print ( vous devez payer 20 $ ) elseif discount < 31 % then print ( vous devez payer 10 $ ) end if ; _ _ _
Dans l’exemple ci-dessus, si la remise est de 10 %, la première instruction if sera évaluée comme vraie et “vous devez payer 30 $” sera imprimé. Toutes les autres instructions en dessous de cette première instruction if seront ignorées.
L’ elseifinstruction, dans le langage Ada par exemple, est simplement du sucre syntaxique pour elsesuivi de if. En Ada, la différence est qu’un seul end ifest nécessaire, si l’on utilise elseifau lieu de elsesuivi de if. PHP utilise le mot- elseifclé [1] à la fois pour ses accolades ou ses syntaxes deux-points. Perl fournit le mot-clé elsifpour éviter le grand nombre d’accolades qui seraient requises par les instructions multiples ifet else. Python utilise le mot-clé spécial elifcar la structure est indiquée par une indentation plutôt que par des accolades, donc une utilisation répétée de elseetifnécessiterait une indentation accrue après chaque condition. Certaines implémentations de BASIC , telles que Visual Basic , [2] utilisent ElseIfégalement. De même, les shells UNIX antérieurs (regroupés plus tard jusqu’à la syntaxe du shell POSIX [3] ) utilisent également elif, mais en donnant le choix de délimiter avec des espaces, des sauts de ligne ou les deux.
Cependant, dans de nombreux langages descendant plus directement d’Algol, tels que Simula , Pascal , BCPL et C , cette syntaxe spéciale pour la else ifconstruction n’est pas présente, ni dans les nombreux dérivés syntaxiques de C, tels que Java , ECMAScript et bientôt. Cela fonctionne car dans ces langages, toute instruction unique (dans ce cas …) peut suivre une condition sans être enfermée dans un bloc.if cond
Ce choix de conception a un léger “coût”. Chaque else ifbranche ajoute effectivement un niveau d’imbrication supplémentaire. Cela complique le travail du compilateur (ou des personnes qui écrivent le compilateur), car le compilateur doit analyser et implémenter des else ifchaînes arbitrairement longues de manière récursive.
Si tous les termes de la séquence de conditions testent la valeur d’une seule expression (par exemple, if x=0… else if x=1… else if x=2…), une alternative est l’ instruction switch , également appelée instruction case ou instruction select. Inversement, dans les langages qui n’ont pas d’instruction switch, celles-ci peuvent être produites par une séquence d’ else ifinstructions.
Expressions si-alors-sinon
De nombreux langages prennent en charge les expressions if , qui sont similaires aux instructions if , mais renvoient une valeur en conséquence. Ainsi, ce sont de vraies expressions (qui évaluent une valeur), et non des déclarations (qui peuvent ne pas être autorisées dans le contexte d’une valeur).
Famille Algol
ALGOL 60 et quelques autres membres de la famille ALGOL permettent if–then–elsecomme expression :
mavariable := si x > 20 alors 1 sinon 2 Dialectes Lisp
Dans les dialectes de Lisp – Scheme , Racket et Common Lisp – dont le premier s’est largement inspiré d’ALGOL :
;; Scheme ( definir mavariable ( if ( > x 12 ) 1 2 )) ; Affecte ‘mavariable’ à 1 ou 2, selon la valeur de ‘x’ ;; Common Lisp ( let (( x 10 )) ( setq mavariable ( if ( > x 12 ) 2 4 ))) ; Attribue ‘mavariable’ à 2 Haskell
Dans Haskell 98, il n’y a qu’une expression if , pas d’ instruction if , et la elsepartie est obligatoire, car chaque expression doit avoir une valeur. [4] La logique qui serait exprimée avec des conditions dans d’autres langages est généralement exprimée avec une correspondance de motifs dans des fonctions récursives.
Parce que Haskell est paresseux , il est possible d’écrire des structures de contrôle, telles que if , sous forme d’expressions ordinaires ; l’évaluation paresseuse signifie qu’une fonction if ne peut évaluer que la condition et la branche appropriée (alors qu’un langage strict évaluerait les trois). Il peut s’écrire ainsi : [5]
si’ :: Bool -> a -> a -> a si’ Vrai x _ = x si’ Faux _ y = y Langages de type C
Les langages C et de type C ont un Opérateur ternaire spécial ( ?: ) pour les expressions conditionnelles avec une fonction qui peut être décrite par un modèle comme celui-ci :
condition ? evaluated-when-true : evaluated-when-false
Cela signifie qu’il peut être intégré dans des expressions, contrairement aux instructions if, dans les langages de type C :
ma_variable = x > 10 ? “foo” : “barre” ; // Dans les langages de type C
qui peut être comparée aux expressions if-then-else de la famille Algol (contrairement à une déclaration ) (et similaires dans Ruby et Scala, entre autres).
Pour accomplir la même chose en utilisant une instruction if, cela prendrait plus d’une ligne de code (selon les conventions de mise en page typiques) et nécessiterait de mentionner “my_variable” deux fois :
si ( x > 10 ) ma_variable = “foo” ; autre ma_variable = “bar” ;
Certains soutiennent que l’instruction explicite if/then est plus facile à lire et qu’elle peut se compiler en un code plus efficace que l’Opérateur ternaire [6] , tandis que d’autres soutiennent que les expressions concises sont plus faciles à lire que les instructions réparties sur plusieurs lignes contenant des répétitions.
Petit Basique x = TextWindow . ReadNumber () If ( x > 10 ) Then TextWindow . WriteLine ( “Ma variable s’appelle ‘foo’.” ) Else TextWindow . WriteLine ( “Ma variable s’appelle ‘bar’.” ) EndIf
Tout d’abord, lorsque l’utilisateur exécute le programme, un curseur apparaît en attendant que le lecteur tape un nombre. Si ce nombre est supérieur à 10, le texte “Ma variable s’appelle ‘foo’.” s’affiche à l’écran. Si le nombre est inférieur à 10, alors le message “Ma variable s’appelle ‘bar’.” est imprimé sur l’écran.
Visual Basic
Dans Visual Basic et certains autres langages, une fonction appelée IIfest fournie, qui peut être utilisée comme expression conditionnelle. Cependant, elle ne se comporte pas comme une vraie expression conditionnelle, car les branches true et false sont toujours évaluées ; c’est juste que le résultat de l’un d’eux est rejeté, tandis que le résultat de l’autre est renvoyé par la fonction IIf.
TCL
En Tcl if , ce n’est pas un mot-clé mais une fonction (en Tcl connue sous le nom de commande ou proc). Par example
si { $x > 10 } { met “Foo!” }
invoque une fonction nommée ifen passant 2 arguments : le premier étant la condition et le second étant la vraie branche. Les deux arguments sont passés sous forme de chaînes (en Tcl, tout ce qui est entre accolades est une chaîne).
Dans l’exemple ci-dessus, la condition n’est pas évaluée avant l’appel de la fonction. Au lieu de cela, l’implémentation de la iffonction reçoit la condition sous forme de valeur de chaîne et est chargée d’évaluer cette chaîne en tant qu’expression dans la portée des appelants. [7]
Un tel comportement est possible en utilisant les commandes uplevelet expr:
Uplevel permet d’implémenter de nouvelles constructions de contrôle en tant que procédures Tcl (par exemple, uplevel pourrait être utilisé pour implémenter la construction while en tant que procédure Tcl). [8]
Parce ifqu’il s’agit en fait d’une fonction, il renvoie également une valeur :
La valeur de retour de la commande est le résultat du script de corps qui a été exécuté, ou une chaîne vide si aucune des expressions n’était différente de zéro et qu’il n’y avait pas de bodyN. [9] Rouiller
Dans Rust , ifest toujours une expression. Il évalue la valeur de la branche exécutée ou le type d’unité ()si aucune branche n’est exécutée. Si une branche ne fournit pas de valeur de retour, elle est évaluée ()par défaut. Pour s’assurer que le iftype de l’expression est connu au moment de la compilation, chaque branche doit évaluer une valeur du même type. Pour cette raison, une elsebranche est effectivement obligatoire à moins que les autres branches ne prennent la valeur (), car un ifsans an elsepeut toujours prendre la ()valeur par défaut. [dix]
// Attribue à ma_variable une valeur, en fonction de la valeur de x let my_variable = if x > 20 { 1 } sinon { 2 } ; // Cette variante ne sera pas compilée car 1 et () ont des types différents let my_variable = if x > 20 { 1 } ; // Les valeurs peuvent être omises lorsqu’elles ne sont pas nécessaires si x > 20 { imprimez ! ( “x est supérieur à 20” ); }
Arithmétique si
Jusqu’à Fortran 77 , le langage Fortran a une instruction “arithmétique si” qui est à mi-chemin entre un SI calculé et une instruction de cas, basée sur la trichotomie x < 0, x = 0, x > 0. C’était la première instruction conditionnelle dans Fortran : [11]
SI ( e ) étiquette1 , étiquette2 , étiquette3
Où e est une expression numérique (pas nécessairement un nombre entier) ; cela équivaut à
IF ( e . LT . 0 ) GOTO label1 IF ( e . EQ . 0 ) GOTO label2 GOTO label3
Étant donné que ce IF arithmétique équivaut à plusieurs GOTOinstructions pouvant sauter n’importe où, il est considéré comme une instruction de contrôle non structurée et ne doit pas être utilisé si des instructions plus structurées peuvent être utilisées. En pratique, il a été observé que la plupart IFdes instructions arithmétiques faisaient référence à l’instruction suivante avec une ou deux des étiquettes.
Il s’agissait de la seule instruction de contrôle conditionnelle dans l’implémentation originale de Fortran sur l’ ordinateur IBM 704 . Sur cet ordinateur, le code opérationnel de test et de branchement avait trois adresses pour ces trois états. D’autres ordinateurs auraient des registres “drapeaux” tels que positif, zéro, négatif, pair, débordement, report, associés aux dernières opérations arithmétiques et utiliseraient des instructions telles que ” Branche si accumulateur négatif ” puis ” Branche si accumulateur zéro ” ou similaire. Notez que l’expression est évaluée une seule fois , et dans des cas tels que l’arithmétique entière où un débordement peut se produire, les drapeaux de débordement ou de retenue seraient également pris en compte.
Implémentation orientée objet dans Smalltalk
Contrairement à d’autres langages, dans Smalltalk , l’instruction conditionnelle n’est pas une construction de langage mais définie dans la classe Booleancomme une méthode abstraite qui prend deux paramètres, les deux fermetures . Booleana deux sous-classes, Trueet False, qui définissent toutes deux la méthode, Trueexécutant la première fermeture uniquement, Falseexécutant la seconde fermeture uniquement. [12]
var = condition ifTrue : [ ‘foo’ ] ifFalse : [ ‘bar’ ]
Javascript
JavaScript utilise des instructions if-else similaires à celles des langages C ou similaires. Une valeur booléenne est acceptée entre parenthèses entre le mot-clé if réservé et une accolade gauche.
if ( Math . random () < 0.5 ) { console . log ( “Vous avez des têtes!” ); } sinon { console . log ( “Tu as Tails!” ); }
L’exemple ci-dessus prend la condition de Math.random() < 0.5qui sort truesi une valeur flottante aléatoire entre 0 et 1 est supérieure à 0,5. L’instruction l’utilise pour choisir au hasard entre la sortie You got Heads!ou You got Tails!la console. Les instructions Else et Else-if peuvent également être enchaînées après l’accolade de l’instruction qui la précède autant de fois que nécessaire, comme indiqué ci-dessous :
var x = Math . aléatoire (); si ( x < 1 / 3 ) { console . log ( “Une personne a gagné!” ); } sinon si ( x < 2/3 ) { console . _ _ log ( “Deux personnes ont gagné!” ); } sinon { console . log ( “C’est une triple égalité!” ); }
Calcul lambda
Dans le calcul lambda , le concept de conditionnel if-then-else peut être exprimé à l’aide des expressions :
vrai = λx. λy. X faux = λx. λy. y ifThenElse = (λc. λx. λy. (cxy))
- true prend jusqu’à deux arguments et une fois que les deux sont fournis (voir currying ), il renvoie le premier argument donné.
- false prend jusqu’à deux arguments et une fois que les deux sont fournis (voir currying ), il renvoie le deuxième argument donné.
- ifThenElse prend jusqu’à trois arguments et une fois qu’ils sont tous fournis, il passe les deuxième et troisième arguments au premier argument (qui est une fonction qui donne deux arguments et produit un résultat). Nous nous attendons à ce que ifThenElse ne prenne que true ou false comme argument, qui projettent tous deux les deux arguments donnés sur leur seul argument préféré, qui est ensuite renvoyé.
note : si ifThenElse est passé à deux fonctions comme conditions gauche et droite ; il est également nécessaire de passer un tuple vide () au résultat de ifThenElse afin d’appeler réellement la fonction choisie, sinon ifThenElse renverra simplement l’objet fonction sans être appelé.
Dans un système où les nombres peuvent être utilisés sans définition (comme Lisp, les mathématiques traditionnelles sur papier, etc.), ce qui précède peut être exprimé comme une seule fermeture ci-dessous :
(( λvrai. λfaux. λifThenElse. ( ifThenElse vrai 2 3 ) )( λx. λy. x )( λx. λy. y )( λc. λl. λr. c l r ))
Ici, true, false et ifThenElse sont liés à leurs définitions respectives qui sont transmises à leur portée à la fin de leur bloc.
Une analogie JavaScript fonctionnelle (utilisant uniquement des fonctions d’une seule variable pour plus de rigueur) est la suivante :
var calculResult = (( _true => _false => _ifThenElse => _ifThenElse ( _true )( 2 )( 3 ) )( x => y => x )( x => y => y )( c => x => y => c ( X )( y )));
Le code ci-dessus avec des fonctions multivariables ressemble à ceci :
var calculResult = (( _true , _false , _ifThenElse ) => _ifThenElse ( _true , 2 , 3 ) )(( x , y ) => x , ( x , y ) => y , ( c , x , y ) => c ( x , y ));
une autre version de l’exemple précédent sans système où les nombres sont supposés est ci-dessous.
Le premier exemple montre la première branche prise, tandis que le deuxième exemple montre la deuxième branche prise.
) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Smalltalk utilise une idée similaire pour ses représentations vraies et fausses, avec True et False étant des objets singleton qui répondent différemment aux messages ifTrue/ifFalse.
Haskell avait l’habitude d’utiliser ce modèle exact pour son type booléen, mais au moment de l’écriture, la plupart des programmes Haskell utilisent le sucre syntaxique “if a then b else c” qui, contrairement à ifThenElse, ne compose pas à moins d’être enveloppé dans une autre fonction ou réimplémenté comme indiqué dans la section The Haskell de cette page.
Instructions de cas et de commutateur
Les instructions de commutation (dans certains langages, les instructions de cas ou les branches multivoies) comparent une valeur donnée avec des constantes spécifiées et agissent en fonction de la première constante à faire correspondre. Il existe généralement une disposition pour qu’une action par défaut (‘else’, ‘otherwise’) soit entreprise si aucune correspondance ne réussit. Les instructions switch peuvent permettre des optimisations du compilateur , telles que les tables de recherche . Dans les langages dynamiques, les cas peuvent ne pas être limités aux expressions constantes et peuvent s’étendre à la correspondance de modèles , comme dans l’ exemple de script shell à droite, où le ‘*)’ implémente le cas par défaut en tant qu’expression régulière correspondant à n’importe quelle chaîne.
Pascal : | C : | Script shell : |
---|---|---|
case someChar of ‘a’ : actionOnA ; ‘x’ : actionSurX ; ‘y’ , ‘z’ : actionSurYetZ ; sinon actionOnNoMatch ; fin ; | switch ( someChar ) { case ‘a’ : actionOnA ; casser ; cas ‘x’ : actionSurX ; casser ; cas ‘y’ : case ‘z’ : actionOnYandZ ; casser ; par défaut : actionOnNoMatch ; } | case $someChar in a ) actionOnA ; ;; x ) actionSurX ; ;; [ yz ]) actionSurYetZ ; ;; * ) actionOnNoMatch ;; esac |
Correspondance de modèle
La correspondance de modèles peut être considérée comme une alternative aux instructions if–then–else et case . Il est disponible dans de nombreux langages de programmation avec des fonctionnalités de programmation fonctionnelles, telles que Wolfram Language , ML et bien d’autres. Voici un exemple simple écrit en langage OCaml :
associer des fruits avec | “pomme” -> faire cuire la tarte | “noix de coco” -> cuisiner dango_mochi | “banane” -> mélanger ;;
La puissance de la correspondance de modèles réside dans la capacité de faire correspondre de manière concise non seulement des actions, mais également des valeurs à des modèles de données. Voici un exemple écrit en Haskell qui illustre ces deux fonctionnalités :
carte _ [] = [] carte f ( h : t ) = f h : carte f t
Ce code définit une fonction map , qui applique le premier argument (une fonction) à chacun des éléments du deuxième argument (une liste) et renvoie la liste résultante. Les deux lignes sont les deux définitions de la fonction pour les deux types d’arguments possibles dans ce cas – l’un où la liste est vide (renvoyez simplement une liste vide) et l’autre cas où la liste n’est pas vide.
La correspondance de motifs n’est pas à proprement parler toujours une construction de choix, car il est possible dans Haskell d’écrire une seule alternative, qui est garantie de toujours correspondre – dans cette situation, elle n’est pas utilisée comme une construction de choix, mais simplement comme un moyen pour lier les noms aux valeurs. Cependant, il est fréquemment utilisé comme construction de choix dans les langages dans lesquels il est disponible.
Conditionnelles basées sur le hachage
Dans les langages de programmation qui ont des tableaux associatifs ou des structures de données comparables, comme Python , Perl , PHP ou Objective-C , il est idiomatique de les utiliser pour implémenter l’affectation conditionnelle. [13]
pet = input ( “Entrez le type d’animal que vous souhaitez nommer : ” ) known_pets = { “Dog” : “Fido” , “Cat” : “Meowsles” , “Bird” : “Tweety” , } my_name = known_pets [ pet ]
Dans les langages qui ont des fonctions anonymes ou qui permettent à un programmeur d’affecter une fonction nommée à une référence de variable, le flux conditionnel peut être implémenté en utilisant un hachage comme table de répartition .
Attribution
Une alternative aux instructions de branchement conditionnel est la prédication . La prédication est une caractéristique architecturale qui permet aux instructions d’être exécutées de manière conditionnelle au lieu de modifier le flux de contrôle .
Référence croisée du système de choix
Ce tableau fait référence à la spécification de langue la plus récente de chaque langue. Pour les langages qui n’ont pas de spécification, il est fait référence à la dernière implémentation publiée officiellement.
Langage de programmation | Structuré si | switch –select–case | Arithmétique si | Correspondance de motif [A] | ||
---|---|---|---|---|---|---|
alors | autre | sinon – si | ||||
Ada | Oui | Oui | Oui | Oui | Non | Non |
APL | Oui | Oui | Oui | Oui | Non | Non |
Coque bash | Oui | Oui | Oui | Oui | Non | Oui |
C , C++ | Oui | Oui | Oui | Tomber dans | Non | Non |
C# | Oui | Oui | Inutile [B] | Oui | Non | Non |
COBOL | Oui | Oui | Inutile [B] | Oui | Non | Non |
Eiffel | Oui | Oui | Oui | Oui | Non | Non |
F# | Oui | Oui | Oui | Inutile [C] | Non | Oui |
Fortran 90 | Oui | Oui | Oui | Oui | Oui [F] | Non |
Aller | Oui | Oui | Inutile [B] | Oui | Non | Non |
Haskell | Oui | Avait besoin | Inutile [B] | Oui, mais inutile [C] | Non | Oui |
Java | Oui | Oui | Inutile [B] | Chute [14] | Non | Non |
ECMAScript ( JavaScript ) | Oui | Oui | Inutile [B] | Chute [15] | Non | Non |
Mathématique | Oui | Oui | Oui | Oui | Non | Oui |
Obéron | Oui | Oui | Oui | Oui | Non | Non |
perle | Oui | Oui | Oui | Oui | Non | Non |
PHP | Oui | Oui | Oui | Tomber dans | Non | Non |
Pascal , Pascal Objet ( Delphi ) | Oui | Oui | Inutile | Oui | Non | Non |
Python | Oui | Oui | Oui | Non | Non | Oui |
QuickBASIC | Oui | Oui | Oui | Oui | Non | Non |
Rubis | Oui | Oui | Oui | Oui | Non | Oui [G] |
Rouiller | Oui | Oui | Oui | Inutile | Non | Oui |
Scala | Oui | Oui | Inutile [B] | Chute [ citation nécessaire ] | Non | Oui |
SQL | Oui [E] | Oui | Oui | Oui [E] | Non | Non |
Rapide | Oui | Oui | Oui | Oui | Non | Oui |
TCL | Oui | Oui | Oui | Oui | Non | Oui |
Visual Basic , classique | Oui | Oui | Oui | Oui | Non | Non |
Visual Basic .NET | Oui | Oui | Oui | Oui | Non | Non |
WindowsPowerShell | Oui | Oui | Oui | Tomber dans | Non | Non |
- ^ Cela fait référence à la correspondance de modèle en tant que construction conditionnelle distincte dans le langage de programmation – par opposition à la simple prise en charge de la correspondance de modèle de chaîne, telle quedes expressions régulières.
- 1 2 3 4 5 Le souvent rencontrédans la famille de langages C, et dans COBOL et Haskell, n’est pas une fonctionnalité de langage mais un ensemble d’if then elsecombinées avec une disposition de code source particulière. Cependant, cela signifie également qu’une construction else–if distincte n’est pas vraiment nécessaire dans ces langages. else if
- 1 2 Dans Haskell et F #, une construction de choix constant distincte n’est pas nécessaire, car la même tâche peut être effectuée avec une correspondance de modèle.
- ^case Dans une constructionRubyd’expression régulièrefait partie des alternatives de contrôle de flux conditionnel disponibles. Pour un exemple, voircettequestion Stack Overflow.
- 1 2 SQL a deux constructions similaires qui remplissent les deux rôles, toutes deux introduites dansSQL-92. Une expression”recherchéefonctionne comme, tandis qu’une expression “simple” :fonctionne comme une instruction switch. Pour plus de détails et d’exemples, voirCase (SQL).CASECASE WHEN cond1 THEN expr1 WHEN cond2 THEN expr2 […] ELSE exprDflt ENDif … else if … elseCASECASE expr WHEN val1 THEN expr1 […] ELSE exprDflt END
- ↑ L’arithmétiqueifest obsolète dans Fortran 90.
- ^ La correspondance de motifs a été ajoutée dans Ruby 3.0. [16]Certaines constructions d’appariement de motifs sont encore expérimentales.
Voir également
- Branche (informatique)
- Compilation conditionnelle
- Répartition dynamique pour une autre façon de faire des choix d’exécution
- Formalisme de McCarthy pour l’histoire et les références historiques
- État nommé
- Opérateur relationnel
- Tester (Unix)
- Conditions Yoda
- Déménagement conditionnel
Références
- ^ Syntaxe PHP elseif
- ^ Syntaxe Visual Basic ElseIf
- ^ Syntaxe standard du shell POSIX
- ^ Langage et bibliothèques Haskell 98: le rapport révisé
- ^ ” Proposition si-alors-sinon sur HaskellWiki ”
- ^ “Efficient C Tips #6 – N’utilisez pas l’Opérateur ternaire « Stack Overflow » . Embeddedgurus.com. 2009-02-18 . Récupéré le 07/09/2012 .
- ^ “Nouvelles structures de contrôle” . Le wiki de Tcler . Consulté le 21 août 2020 .
- ^ “page de manuel de niveau supérieur” . www.tcl.tk . Consulté le 21 août 2020 .
- ^ “si page de manuel” . www.tcl.tk . Consulté le 21 août 2020 .
- ^ “Expressions si et si let” . Consulté le 1er novembre 2020 .
- ^ “Langage de programmation standard national américain FORTRAN” . 1978-04-03. Archivé de l’original le 11/10/2007 . Récupéré le 09/09/2007 .
- ^ “VisualWorks : Traitement conditionnel” . 2006-12-16. Archivé de l’original le 2007-10-22 . Récupéré le 09/09/2007 .
- ^ “Manière Pythonic d’implémenter les instructions switch/case” . Archivé de l’original le 2015-01-20 . Récupéré le 19/01/2015 .
- ^ Java.sun.com , Spécification du langage Java, 3e édition.
- ^ Ecma-international.org Archivé le 12/04/2015 dans la spécification du langage ECMAScript Wayback Machine , 5e édition.
- ^ “Correspondance de modèle” . Documentation pour Ruby 3.0 .
Liens externes
Cherchez alors ou bien dans Wiktionary, le dictionnaire gratuit. |
-
Médias liés au conditionnel (programmation informatique) sur Wikimedia Commons - Vidéo SI NON (ActionScript 3.0)