Comprendre les expressions conditionnelles si alors sinon / if then else

L’expression conditionnelle est un élément fondamental de la programmation ! C’est pourquoi je vais prendre le temps de vous expliquer ce concept en détail dans cet article.

 

À quoi servent les expressions conditionnelles ?

N’oubliez pas que la programmation n’est jamais que le reflet de la vie courante. Pour le coup, tout le monde, je dis bien tout le monde, utilise tous les jours les expressions conditionnelles sans s’en rendre compte. Un peu comme monsieur Jourdain qui faisait de la prose sans le savoir 😉
Un exemple vaut mieux qu’un long discours :
Le soleil se lève, Paul a bien dormi. Il va dans la cuisine et prépare son petit déjeuner.
Paul veut prendre un fruit. Il y a des pommes et des bananes. Paul adore les bananes, il en prend une.
Quand Paul choisit son fruit, il a utilisé une condition toute simple : SI il y a une banane (ce que je préfère), ALORS j’en prends une.
L’histoire ne le dit pas, mais nous pourrions imaginer que si il n’y a pas de banane, alors Paul aurait pris une pomme, à défaut. C’est exactement la seconde partie d’une expression conditionnelle. En totalité, cela nous donnerait ceci :
Si il y a des bananes
Alors je prends une banane
Sinon je prends une pomme.
Vous le voyez, c’est vraiment tout simple ! Nous effectuons plusieurs choix chaque jour. Prendre les transports ou la voiture (si vous avez le choix, bien sûr), s’habiller, manger équilibré ou pas, choisir la chaine à regarder sur la télé, etc.
En programmation, les expressions conditionnelles permettent de faire des choix en fonction du contexte, dans notre exemple, la présence de banane.

 

L’importance dans le code

 

Un programme informatique consiste à réagir à des demandes venant de l’utilisateur ou du monde extérieur. Cela implique de faire de multiples choix selon des paramètres divers. Ce sont les expressions conditionnelles qui vont permettre de d’écrire ces choix dans le code.
Tous les programmes informatiques contiennent un grand nombre d’expressions conditionnelles. Le domaine qui y a eu le plus recours est certainement l’intelligence artificielle. Longtemps, les IA (pour Intelligence Artificielle) les plus efficaces étaient codées à partir d’expressions conditionnelles imbriquées sur un très grand nombre de niveaux. Un exemple, que je n’ai malheureusement pas pu vérifier, l’IA qui anime les foules d’orques dans le seigneur des anneaux, est principalement codée avec des expressions conditionnelles imbriquées. Cette IA s’appelle Massive (http://massivesoftware.com/). Je vous recommande de faire un petit tour par leur site, le nombre de films auxquels ils ont contribué est assez impressionnant. Si vous avez des sources qui confirment ou infirment cette information, merci de les partager dans les commentaires. 😉

 

Comment cela fonctionne ?

Rentrons un petit plus dans le détail. Une expression conditionnelle se décompose en trois parties :
Si condition
Alors instruction1
Sinon instruction2
Nous représentons une expression conditionnelle avec le schéma suivant :

 

Si alors sinon - If then else

 

Le Si (ou If) : La condition

La condition est une expression booléenne, c’est-à-dire une expression soit vraie soit fausse.
Le mot booléen est assez déroutant, il vient de l’Algèbre de Boole qui est une branche de la mathématique consacrée à la logique et aux calculs que l’on peut faire dessus. Il est en effet possible de combiner plusieurs expressions booléennes ensemble pour décrire quelque chose de plus précis.
Je ferais bientôt un article sur ce sujet qui est très important.
Quelques exemples simples de conditions :

  • Une expression mathématique : 4 < 18. Dans cet exemple, il est assez évident que la réponse sera vraie. Par contre, imaginons une variable entière x dont nous ne connaissons pas la valeur. Nous pourrions écrire la condition : x < 18. Le cas alors ne se déclenchera que si x est bien inférieur à 18.
  • Une fonction qui rend un booléen : jAimeCetArticle(). Nous ne savons pas comment cette fonction détermine si elle aime ou pas cet article, elle rend juste un booléen qui est soit vrai soit faux. Nous pouvons alors exécuter soit le cas alors soit le cas sinon en fonction du retour de la fonction jAimeCetArticle().
    Retenez donc qu’une condition est une expression qui est soit vraie, soit fausse.

 

Le Alors (ou Then) : l’instruction 1

Il désigne la zone contenant la ou les instructions qui sera (seront) exécutée(s) dans le cas où la condition est vraie.

Cette zone peut contenir d’autres expressions conditionnelles.

 

Le Sinon (ou Else) : l’instruction 2

 

Il désigne la zone contenant la ou les instructions qui sera (seront) exécutée(s) dans le cas où la condition est fausse.

Cette zone peut également contenir d’autres expressions conditionnelles. En fait, nous pouvons écrire une condition à tout endroit où nous pouvons mettre une instruction.

 

Quelles formes peuvent-elles prendre ?

Ici il y a deux aspects distincts à étudier.

 

Le pseudo-code, l’algorithmique indépendamment d’un langage

Lors des phases de conception/réflexion/échanges, nous écrivons les programmes sous forme de pseudo-code ou de schéma. Je vous montre donc tout d’abord cette version indépendante des langages, nous verrons ensuite des exemples dans plusieurs langages.
Je vais utiliser ci-dessous les deux représentations, pseudo-code et graphique. Juste une petite aparté pour expliqué ce terme, pseudo-code. Il s’agit tout simplement d’un code ‘virtuel’. Un code est écrit pour une machine spécifique, selon un langage de programmation et doit absolument respecter la syntaxe de celui-ci. Or, le programme, ou l’algorithme, que nous souhaitons écrire, n’est pas dépendant d’un langage ou d’une machine. Le pseudo-code a justement été inventé pour permettre d’écrire un algorithme de manière indépendante, afin de faciliter les échanges et analyses sur les aspects purement algorithmiques. Sans avoir la contrainte de respecter un langage particulier. Le pseudo-code peut donc s’écrire dans toute langue, rappelez-vous : sans contrainte ! Nous faisons ce que nous voulons du moment que nous respectons les règles de l’algorithmique.
Il est possible de rencontrer 3 variantes majeures. Gardez bien en tête que toutes ces variantes sont équivalentes, la logique reste la même !

 

La forme basique et ses variantes : si alors et si alors sinon

J’ai fait le choix jusqu’à présent de vous montrer une forme simple en SI/ALORS/SINON (ou IF/THEN/ELSE en anglais). Notez bien que, oui, nous pouvons faire du pseudo-code en français, et je vais continuer à vous montrer l’équivalence en anglais. Pourquoi ? Tout simplement, car, à ma connaissance, un seul langage propose des mots clés en français (Windev). Je vous propose dans ce blog d’apprendre à programmer de manière très large et je ne veux donc pas vous orienter sur un seul langage. Je continuerais donc à vous proposer les traductions anglaises, car c’est très probablement ce que vous utiliserez plus tard :).
Il y a trois variantes à cette forme basique, étudions tout d’abord les 2 plus classiques :
SI ALORS / IF THEN
SI ALORS SINON / IF THEN ELSE
Nous avons déjà vu en détail la seconde.
La première n’est qu’une contraction de la seconde, nous avons enlevé le cas sinon/else. En effet, il est serait dommage d’être obligé d’écrire un cas sinon/else même si nous n’avons rien à faire dans le cas où la condition est fausse.
Reprenons notre exemple avec les fruits. Imaginons que s’il n’y a pas de banane, Paul ne souhaite pas prendre autre chose. Si la première version n’existe pas, nous sommes obligés d’écrire ceci :
Si ilYADesBananes
Alors mangerUneBanane
Sinon
Cas d'un Sinon Else Vide
Je laisse le cas sinon vide, car il n’y a rien à exécuter dans ce cas là. Vous serez, je pense, d’accord avec moi pour dire qu’il est plus simple d’écrire :
Si ilYADesBananes
Alors mangerUneBanane

Cas sans sinon else

 

La troisième forme avec sinonsi/elseif

La troisième version permet de grouper des expressions conditionnelles si besoin. Avant de la découvrir, retournons sur notre exemple du petit déjeuner, nous pourrions écrire quelque chose d’un peu plus compliqué :
Si ilYADesBananes
Alors mangerUneBanane
Sinon     Si ilYaDesFruits
Alors mangerUnAutreFruitChoisitAléatroiement
Sinon meFaireCuireUnOeuf
Car oui, pour que notre algorithme soit applicable tous les matins, il faut aussi vérifier s’il y a des fruits et préciser ce que l’on doit faire s’il n’y en a pas.
Vous remarquerez que j’ai intégré une expression conditionnelle en lieu et place d’une instruction dans le cas sinon/else. En fait, j’ai le droit de mettre des expressions conditionnelles là où je peux mettre une instruction. Donc je peux le faire dans les cas vrais et/ou les cas faux. Par contre, je ne peux pas mettre une expression conditionnelle dans la condition (*).
Venons-en à la troisième version. C’est en fait une contraction de ce que je viens d’écrire, en effet cette version inclus un test dans le cas Sinon/Else. Cela nous permet de réécrire de manière équivalente :
Si ilYADesBananes
Alors mangerUneBanane
SinonSi ilYaDesFruits
Alors mangerUnAutreFruitChoisitAléatroiement
Sinon meFaireCuireUnOeuf

Si alors sinonsi ou if then elseif

 

Petit exercice : ajouter un nouveau test pour vérifier qu’il y a des oeufs avant d’en faire cuire un. Sinon Paul passera à la boulangerie avant d’aller au travail.

 

La version en ligne : l’opérateur ternaire ? :

Il est également possible d’écrire le si alors sinon/if then else en une seule ligne avec l’opérateur ternaire. L’expression conditionnelle ainsi obtenue est complètement équivalente à une expression conditionnelle normale.
Ainsi :
Si ilYADesBananes
Alors mangerUneBanane
Sinon mangerUnAutreFruitChoisitAléatroiement
Est équivalent à :
resultat = ilYADesBananes ? mangerUneBanane : mangerUnAutreFruitChoisitAléatroiement

La condition s’écrit avant le ? qui est suivi par l’instruction 1, suivie d’un : pour la séparer de l’instruction 2.

Vous noterez que dans cette version, nous devons rendre quelque chose, c’est pourquoi j’ai ajouté résultat = en début de ligne. Cela signifie que les instruction 1 et 2 sont obligées de rendre un résultat compatible avec ce qui est attendu, en respect avec le langage utilisé.
C’est particulièrement utile lorsque nous devons faire un affichage basé sur une condition simple. Par exemple, savoir si une variable est paire ou impaire :
Afficher(Concatener(“La variable est “, modulo(x,2)==0?”paire”:”impaire”))
En imaginant que la fonction Afficher permet d’afficher le texte et que la fonction Concaterner permet de joindre deux textes différents, ici “La variable est ” et le résultat de notre opérateur ternaire.
En Java cela donnerait :
System.out.println(“La variable est “+(x%2==0?”paire”:”impaire”));
System.out.println permet d’afficher, l’opérateur + permet de concaténer et l’opérateur % effectue le calcul de modulo.

 

La sélection avec Case

Dans certains cas, nous devons tester une même variable avec de nombreux cas. Par exemple, pour afficher le nom du mois en cours, en imaginant que la variable moisEnCours contienne le numéro du mois en cours :
if moisEnCours==1 then Afficher “Janvier”
elseif moisEnCours==2 then Afficher “Février”
elseif moisEnCours==3 then Afficher “Mars”
elseif moisEnCours==4 then Afficher “Avril”

Vous remarquez que c’est assez fastidieux. Et encore, j’ai utilisé la version plus simple avec le sinonsi/elseif. Sans cela vous auriez beaucoup plus de ligne.
Ce bloc de si/if imbriqué est avantageusement remplacé par une expression conditionnelle switch case :
switch moisEncours
case 1 : Afficher “Janvier”
case 2 : Afficher “Février”
case 3 : Afficher “Mars”
case 4 : Afficher “Avril”
case 5 : Afficher “Mai”

Notez que là aussi vous pouvez mettre plusieurs instructions après chaque case.

 

Exemples dans plusieurs langages

L’expression conditionnelle si/alors/sinon (if/then/else), est utilisée sous des syntaxes différentes selon le langage que vous utilisez.
Voici quelques exemples :
En VBA :

If condition Then
    instructionDansLeCasVrai
Else
    instructionDansLeCasVrai
End If

Le code est tout à fait similaire au pseudo-code, il y a juste le End If ajouté pour marquer la fin du bloc d’instructions dans le cas faux.
En Java, C, C++, C#, JavaScript, PHP, Perl :

if(condition()) {
    instructionsDansLeCasVrai;
}
else {
    instructionsDansLeCasFaux;
}

Vous noterez l’absence du mot clé then. Il est sous-entendu, car les premières instructions tout de suite après la condition correspondent naturellement au cas vrai. Les créateurs de ces  langages ont donc préféré ne pas forcer le développeur à systématiquement écrire then.
En Python :

if condition :
    instructionDansLeCasVrai
else :
    instructionDansLeCasFaux

Ici, vous remarquerez que la syntaxe du langage est vraiment différente, pas d’accolade (les { et }, remplacée par la tabulation) ni de ; en fin d’instruction. En ce qui concerne la structure de l’expression conditionnelle, elle reste similaire, le then étant également sous-entendu.
Dans l’ensemble, vous pouvez constater que les langages utilisent une forme assez similaire au pseudo-code. Attention toutefois à la syntaxe ! La première erreur des débutants se trouve souvent sur la syntaxe. Il faut la respecter à la lettre !

 

Et après ?

Les expressions conditionnelles sont très importantes, elles permettent à notre programme de faire des choix, de s’adapter en fonction des actions de l’utilisateur ou du contexte. Seules, elles ne servent à rien. Il faut y ajouter les instructions, les variables (tant dans les conditions que dans les instructions) et également les boucles. Nous verrons cela dans les prochains articles.
Un petit détail pour être complet, il est possible de mettre des opérateurs ternaires dans une condition booléenne, du moment que l’opérateur ternaire rende un booléen. Je vous l’indique pour être complet, mais j’avoue avoir hésité à vous le mentionner ici. C’est trop compliqué, cela facilite l’apparition d’erreur (de bugs), et cela réduit la lisibilité de votre code ! Oui j’ai dit que ce n’était pas possible plus haut, à l’endroit où j’ai mis un (*), alors que dans ce cas particulier c’est possible, mais non, s’il vous plaît, ne le faites pas !

 

Pratiquons un peu plus

Tout est bien clair ? Si vous avez des questions, n’hésitez pas à me les poser dans les commentaires.
Pratiquons un peu pour vous permettre de jouer avec tout cela. C’est en forgeant que l’on devient forgeron…

 

Les choix de votre journée

Réfléchissez aux choix que vous avez eus à prendre aujourd’hui ou hier, et mettez-les par écris, en pseudo-code. Faites comme moi, imaginez que vous avez les fonctions utiles à votre disposition (comme ilYADesFruits() par exemple). Le but ici est de manipuler la logique des expressions conditionnelles.
Comment avez-vous choisi votre repas ? Votre tenue ? Vos actions de la journée ?
Faites l’exercice pour 3 ou 4 choix.
Ensuite, tentez de complexifier vos tests en imbriquant d’autres tests les uns dans les autres.

 

Un petit test en JavaScript

J’ai créé un petit exercice en JavaScript pour que vous puissiez manipuler un peu. Pourquoi le JavaScript ? Tout simplement, car ce langage est directement interprété par votre navigateur, vous n’avez rien d’autre à installer, vous restez dans le navigateur.
Dans l’exercice suivant, vous pouvez saisir 2 entiers et vous devez modifier le code pour les classer. Le code indique déjà s’ils sont dans l’ordre croissant ou décroissant. Pouvez-vous modifier le code pour indiquer s’ils sont égaux ?

Petites explications sur l’utilisation de jsfiddle et cet exercice :

Aide sur l'écran JsFiddle

Et voici les trois cas possibles actuellement :

Les 3 résultats actuels de l'exercice
Vous pouvez constater que lorsqu’ils sont égaux, le résultat affiché est “décroissant”. Modifiez le code pour afficher “sont égaux”. Pour cela vous devez modifier cette partie du code :
Zone de code JavaScript a modifier
Le reste est utile pour faire appel à ce code, n’y touchez pas.

 

Alors, y êtes-vous arrivé ?
Plus dur, pouvez-vous dire s’ils sont divisibles ? Par exemple, si l’on peut diviser le premier par le second. Pour cela vous aurez besoin du modulo : %.

 

Si vous avez lu les articles comment débuter la programmation en VBA sous Excel, faîtes le même exercice sur Excel Winking smile.

 

Qu’avez vous appris aujourd’hui ? Vous étiez-vous déjà servis des expressions conditionnelles ? Aviez vous eu des difficultés ? Partagez-nous votre expériences dans les commentaires.

Partager l'article
  •  
  •  
  •  
  •  

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.