La syntaxe en [!thelang] est la suivante :
[!java|scala]if (condition) { aFaireSiVraie(); aFaireEnsuiteSiVraie(); }[/!][!python]if condition: aFaireSiVraie() aFaireEnsuiteSiVraie()[/!] aFaireDansTousLesCas()[!java];[/!]
Le mot if
signifie «si» en anglais. Si la condition est vraie,
alors le code du bloc suivant sera exécuté, puis l'exécution se poursuivra
avec la suite du code, après le bloc. Sinon, si la condition est fausse, le
bloc suivant sera ignoré et l'exécution passera directement au code placé
après lui. Le bloc conditionnel peut contenir plusieurs instructions. Il
peut même contenir d'autre tests, avec leurs sous-blocs associés.
Dans cet exemple, les instructions aFaireSiVraie()
et
aFaireSiVraie()
seront exécutée si (et seulement si) la
condition est vraie tandis que l'instruction
aFaireDansTousLesCas()
sera exécutée que la condition soit
vraie ou fausse.
En [!thelang], les blocs sont
[!java|scala]délimités par des accolades : le symbole { commence un bloc
tandis
que le symbole } le ferme. Les caractères blancs ne sont pas pris en
compte[/!][!java].[/!][!scala], tant que les instructions restent séparées
soit par des points-virgules, soit par des retour à la ligne.[/!]
[!java|scala]Il reste très important d'indenter correctement votre code pour
qu'il reste lisible.[/!]
[!python]marqués par l'indentation : toutes les lignes indentés (=décalées
vers la droite par des espaces) font partie du bloc. Il est assez courant
d'utiliser quatre espaces pour indenter le code, mais cela fonctionne quel
que soit le nombre de caractères blancs utilisés pour celà. Simplement,
toutes les lignes d'un bloc donné doivent utiliser le même nombre de
blancs. La fin des blocs de code n'est pas marquée par un symbole
particulier: il s'arrête dès que les lignes ne sont plus
indentées. N'oubliez pas les deux points (:) à la fin de la ligne
if
, python en a besoin pour savoir qu'un nouveau bloc commence.
Le fait que python utilise l'indentation pour maquer les blocs est un
avantage pour les débutants: cela vous forcera à respecter des critères
stricts de mise en forme de votre code.[/!]
Il est très facile de se perdre dans un code qui n'est pas correctement
indenté. Il est donc important que vous fassiez en sorte que votre code
reste clair et lisible pour que le relire et le modifier reste plaisant et
productif.
Toutes les instructions d'un bloc doivent avoir la même indentation, et il n'est pas possible de couper un bloc. Les deux exemples suivants de code sont incorrects et vont générer des erreurs.
if condition:
quoiFaire()
quoiFaireEnsuite() # une espace de trop
quoiFaireDansTousLesCas()
if condition:
quoiFaire()
quoiFaireDansTousLesCas()
quoiFaireEnsuite() # Ce bloc n'est rataché à aucune ligne de condition
La condition doit être une expression de type
[!java]boolean[/!][!scala|python]Boolean[/!]
(expression
booléenne). Le sous-bloc sera exécuté seulement si cette expression vaut
[!java|scala]true[/!][!python]True[/!]
(vrai), et il sera
ignoré si sa valeur est
[!java|scala]false[/!][!python]False[/!]
(faux).
[!java|scala]true[/!][!python]True[/!]
et
[!java|scala]false[/!][!python]False[/!]
sont des constantes
définies directement par [!thelang], tout comme 0 ou 1 en mathématiques.
La condition peut aussi être une variable booléenne (nous reviendrons sur
les variables dans un autre exercice, pas de panique) ou un test
arithmétique,comme x == 5
, qui teste si la valeur actuelle de
x est 5, ou bien comme != (teste l'inégalité, càd si le
membre gauche a une valeur différente du membre droit), <
(inférieur à), > (supérieur à), <= (inférieur ou égal
à), >= (supérieur ou égal à).
Attention au piège classique, qui consiste à tester l'égalité d'une variable avec = au lieu de ==. Heureusement, [!java|scala]le compilateur[/!][!python]l'interpréteur[/!] détecte le plus souvent ce problème et vous le signale, mais pas tout le temps. Si la variable est de type booléen, il peut se faire prendre au piège, et il convient donc d'être attentif...
La condition peut également être un appel à certaines méthodes particulières, dont le résultat est un booléen. Par exemple, la méthode estFaceMur() de la buggle renvoie vrai si la buggle est face à un mur, et faux sinon.
Enfin, il est possible de construire une condition composée de plusieurs sous-conditions reliées par des opérations booléennes:
cond1 [!java|scala]&&[/!][!python]and[/!] cond2
est vraie si
cond1 et cond2 est vraie (d'ailleurs, si
cond1 est fausse, cond2 n'est même pas évaluée puisqu'on
sait déjà que la conjonction des deux propositions ne peut pas être vraie).cond1 [!java|scala]||[/!][!python]or[/!] cond2
est vraie si
cond1 ou cond2 est vraie (d'ailleurs, si
cond1 est vraie, cond2 n'est même pas évaluée puisqu'on
sait déjà que la disjonction des deux propositions est vraie).[!java|scala]![/!][!python]not [/!]cond
est vraie si
cond ne l'est pas.Pour finir, il est possible de spécifier ce qu'il faut faire quand la
condition est fausse, en utilisant la syntaxe suivante («else» signifie
«sinon» en anglais). Dans ce cas, l'instruction
aFaireSiLaConditionEstFausse()
ne sera exécutée que si la
condition est fausse.
[!java|scala]if (condition) { aFaireSiLaConditionEstVraie(); } else { aFaireSiElleEstFausse(); }[/!][!python]if (condition): aFaireSiLaConditionEstVraie() else: aFaireSiElleEstFausse()[/!]
N'oubliez pas les deux points (:) après le else, ils indiquent qu'un nouveau bloc débute.
estFaceMur()
.
Cet exercice est un peu particulier : il faut que votre programme fonctionne pour plusieurs buggles, chacune étant dans une situation initiale différente. Le même code sera utilisé pour chacune d'entre elles.
Quand votre programme fonctionne, passez à l'exercice suivant (qui est caché par défaut dans un sous-arbre de la fenêtre de sélection).