Section 3.2

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 à temperature une valeur positive, puis négative, et vérifiez que chaque branche est bien atteinte.
  • Retirez le else final et donnez à temperature la 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é.