if et else
Exécuter une chose ou une autre — et pourquoi une condition doit être un bool.
Une comparaison rend true ou false. if s’en sert pour choisir ce que le programme exécute.
@entry(demarrer)
object MonProgramme {
demarrer() {
var temperature := 0;
if (temperature > 0) {
Console.print(text: "au-dessus de zéro");
} else if (temperature < 0) {
Console.print(text: "au-dessous de zéro");
} else {
Console.print(text: "exactement zéro");
}
}
}
temperature vaut zéro : ni au-dessus, ni au-dessous. Changez sa valeur et la sortie change.
Trois branches, une seule empruntée
if teste sa condition. Si elle est vraie, il exécute le bloc qui suit et saute tout le
reste ; sinon il passe au else if, puis au else si aucun n’a répondu. Une seule branche
s’exécute, toujours — même si deux conditions auraient pu être vraies, c’est la première qui
gagne.
Le else final n’est pas obligatoire. Sans lui, un programme dont aucune condition n’est vraie
ne fait simplement rien de ce bloc et continue plus bas.
Les parenthèses ne sont pas optionnelles
if (temperature > 0) — les parenthèses autour de la condition sont obligatoires, et
c’est la règle partout où une condition apparaît dans le langage. Aucune exception, donc rien à
mémoriser au cas par cas.
Une condition est un bool, jamais un nombre
C’est le point qui distingue Archon de beaucoup de langages, et il se démontre en une ligne :
var n := 1;
if (n) { … }
error[T002]: the condition of a 'if' must be a 'bool', not a 'int64'
(no implicit conversion from 0/1)
Ailleurs, 0 vaut « faux » et tout le reste « vrai ». Ici non : un entier est un nombre, pas
une réponse à une question. Si vous vouliez demander « n est-il non nul ? », écrivez-le —
if (n != 0). La condition dit alors ce qu’elle teste, au lieu de le laisser deviner.
Ce refus a un coût, une paire de caractères à écrire, et un gain : une condition ne peut plus vouloir dire autre chose que ce qu’elle a l’air de dire.
À vous
- Donnez à
temperatureune valeur positive, puis négative, et vérifiez que chaque branche est bien atteinte. - Retirez le
elsefinal et donnez àtemperaturela valeur zéro : le programme n’affiche rien, et c’est correct. - Écrivez
if (temperature)sans comparaison, et lisez le refus en entier — il nomme le type qu’il attendait et celui qu’il a trouvé.