Comparer
Les six comparaisons, et la réponse à la question laissée en suspens sur le signe =.
Comparer deux valeurs donne un bool — true ou false. Vous en avez déjà croisé un sans y
prêter attention : la variable inscrit de la sous-section « Montrer une valeur ».
@entry(demarrer)
object MonProgramme {
demarrer() {
var age := 42;
Console.print(text: $"age vaut-il 42 ? {age = 42}");
Console.print(text: $"age diffère-t-il de 42 ? {age != 42}");
Console.print(text: $"age dépasse-t-il 18 ? {age > 18}");
Console.print(text: $"age atteint-il 18 ? {age >= 18}");
}
}
Quatre questions, quatre réponses.
= compare, et n’assigne jamais
Voici la réponse promise en 2.1. Le signe = est réservé à l’égalité : age = 42 ne met
pas 42 dans age, il demande si age vaut 42, et rend true ou false.
C’est pour cela qu’assigner s’écrit :=. Chaque geste a son propre signe, et le signe d’égalité
veut dire ce qu’il veut dire en mathématiques depuis toujours.
Il n’y a donc pas de == dans ce langage. Là où le C, le Java ou le Python écrivent =
pour assigner et == pour comparer, Archon n’a pas besoin de doubler le signe pour distinguer
les deux — ils ne se ressemblent déjà pas.
Le gain n’est pas cosmétique. La confusion entre = et == est une des fautes les plus
anciennes et les plus coûteuses de la famille du C : if (x = 5) y est du code parfaitement
valide, qui assigne là où on voulait comparer, et qui passe sans un mot. Ici la faute n’a pas
de forme : on ne peut pas écrire l’un en croyant écrire l’autre.
Les six
| écrit | vrai quand |
|---|---|
a = b | les deux valent la même chose |
a != b | elles diffèrent |
a < b | a est strictement plus petit |
a > b | a est strictement plus grand |
a <= b | a est plus petit, ou égal |
a >= b | a est plus grand, ou égal |
!= se lit « différent de ». C’est le seul endroit du langage où le point d’exclamation
paraît : il est réservé à cet usage, et la négation, elle, s’écrit en toutes lettres — on la
verra en 3.3.
Les textes se comparent aussi
= ne sert pas qu’aux nombres. Deux textes se comparent par leur contenu :
var mot := "Alexandrie";
Console.print(text: $"{mot = "Alexandrie"}"); // true
Deux textes identiques sont égaux, même s’ils ont été écrits à deux endroits différents du programme.
À vous
- Changez
42en une autre valeur dans les quatre questions et prédisez chaque réponse avant d’exécuter. - Comparez deux textes qui ne diffèrent que par une majuscule —
"simon" = "Simon". La comparaison est exacte, elle ne pardonne rien. - Écrivez
age = 43;seul sur une ligne, comme une instruction. Le compilateur refuse — une comparaison dont on jette le résultat ne fait rien — et il nomme au passage le signe que vous vouliez peut-être.