Section 3.3

Combiner des conditions

and, or, not, xor — en toutes lettres, et seulement sur des bool.

Une question suffit rarement. Archon en combine plusieurs avec quatre mots.

@entry(demarrer)
object MonProgramme {
    demarrer() {
        var age := 42;
        var inscrit := true;

        if (age >= 18 and inscrit) {
            Console.print(text: "peut voter");
        }

        if (not inscrit) {
            Console.print(text: "reste à inscrire");
        } else {
            Console.print(text: "déjà inscrit");
        }
    }
}

Quatre mots, écrits en toutes lettres

écritvrai quand
a and bles deux sont vrais
a or bau moins un des deux est vrai
not aa est faux
a xor bexactement un des deux est vrai

Il n’y a pas de &&, pas de ||, pas de ! : les opérateurs logiques s’écrivent comme on les lit. Le point d’exclamation reste réservé à !=, et rien d’autre — c’est ce qui permet de le reconnaître au premier coup d’œil.

xor est le moins courant des quatre : il est vrai quand les deux réponses diffèrent. « L’un ou l’autre, mais pas les deux. »

Seulement sur des bool

Comme la condition d’un if, ces quatre mots n’acceptent que des bool. age and inscrit est refusé si age est un nombre — il faut une comparaison qui rende une réponse : age >= 18 and inscrit.

C’est la même règle qu’en 3.2, appliquée un cran plus loin, et pour la même raison : un nombre n’est pas une réponse à une question.

Lire une condition composée

if (age >= 18 and inscrit) {

La comparaison se fait d’abord, le and ensuite — >= lie plus fort que and, comme * lie plus fort que + en arithmétique. Vous n’avez donc pas à parenthéser chaque comparaison. Quand un doute subsiste, les parenthèses sont permises et rendent l’intention explicite.

À vous

  • Passez inscrit à false : la première condition tombe, la seconde change de branche.
  • Remplacez and par or et prédisez la sortie avant d’exécuter.
  • Écrivez if (age and inscrit) — sans comparaison. Le refus nomme le type qu’and attend, et redit à sa façon qu’une condition se construit avec des réponses, pas avec des nombres.
  • Essayez xor entre inscrit et une seconde variable bool de votre choix, et vérifiez qu’il est faux quand les deux sont vraies.