Section 2.1

Déclarer une valeur

Nommer une valeur avec var, la figer avec const, et la flèche := qui les pose.

Deux mots suffisent à retenir quelque chose : var pour ce qui peut changer, const pour ce qui ne le doit pas.

@entry(demarrer)
object MonProgramme {
    demarrer() {
        var salutation := "Bonjour";
        salutation := "Salut";

        const NOM := "Simon Magus";

        Console.print(text: salutation + ", " + NOM + " !");
    }
}

Exécutez-le : Salut, Simon Magus !. La salutation valait « Bonjour » avant de valoir « Salut » ; le nom, lui, n’a pas bougé et ne bougera pas.

var — un nom sur une valeur qui peut changer

var salutation := "Bonjour"; déclare salutation et lui donne un texte. La ligne suivante le change : salutation := "Salut";. C’est la même flèche dans les deux cas, et ce n’est pas un hasard — déclarer et réassigner, c’est le même geste, poser une valeur sous un nom.

Le type ne se dit pas, il se suit. Vous n’avez écrit nulle part que salutation est un texte ; le compilateur le déduit des guillemets. Il n’en est pas moins fixé pour de bon : salutation est un texte pour toute sa vie, et lui assigner autre chose plus loin serait refusé. Rien n’empêche de l’écrire quand même, quand on veut être explicite :

var salutation: str := "Bonjour";

Ce que vous gagnez alors, ce n’est pas la sécurité — elle était déjà là — c’est de dire au lecteur, sans qu’il ait à le déduire, ce que cette variable contient.

const — une valeur qui ne bougera plus

const NOM := "Simon Magus"; déclare la même chose, à ceci près que le compilateur refusera toute tentative de la changer. Essayez d’ajouter NOM := "quelqu'un d'autre"; et lisez la réponse :

error[D001]: 'NOM' is declared 'const': its value cannot change

Ce n’est pas une politesse, c’est une garantie : quiconque lit la suite du programme sait que NOM vaut encore ce qu’il valait à sa déclaration, sans avoir à relire ce qu’il y a entre les deux. Le type y est optionnel comme pour var — const G := 9.81; suffit.

Assembler des textes avec +

La dernière ligne mérite un mot. Console.print n’accepte qu’un seul texte, et nous en avons deux à montrer — plus la ponctuation entre les deux. Le signe + les met bout à bout :

salutation + ", " + NOM + " !"

Quatre morceaux collés en un seul texte : la variable, une virgule, la constante, un point d’exclamation. C’est cela que print reçoit.

Et c’est lourd. Quatre morceaux pour une phrase de trois mots, avec des guillemets à ouvrir et refermer autour de chaque bout de ponctuation, et des espaces qu’il faut penser à mettre dans les guillemets — oubliez celui de ", " et vous obtenez Salut,Simon Magus. La phrase qu’on veut lire n’apparaît nulle part en entier : elle est en pièces détachées, et c’est au lecteur de la remonter dans sa tête.

Il y a une écriture plus légère, qui montre la phrase telle qu’elle sortira. C’est le sujet de la sous-section suivante — d’ici là, + fait le travail.

:=, et pas =

Vous l’avez sous les yeux depuis le début de la page : Archon écrit := pour assigner, à la déclaration comme à la réassignation. Le signe = seul n’assigne pas — il est réservé à un autre usage, qu’on verra en son temps.

Retenez la flèche pour l’instant : partout où vous voulez poser une valeur sous un nom, c’est :=. Et si l’oubli vous échappe, le compilateur vous le dira plutôt que de deviner à votre place.

À vous

  • Changez var salutation en const salutation et exécutez : le compilateur nomme la ligne fautive et la raison.
  • Déclarez var ville := "Alexandrie"; puis, plus bas, ville := 12;. Le refus vous dira que le type d’une variable est fixé à sa déclaration.
  • Déclarez deux fois le même nom — var salutation := "Bonsoir"; une seconde fois. Un nom ne se réutilise pas dans la même portée, et le compilateur nomme celui qui était déjà pris.