Section 7.2

Une forme, des exemplaires

archetype déclare la forme ; le programme en fait autant d'exemplaires qu'il veut.

Un object n’existe qu’en un seul exemplaire — c’est sa définition, posée dès la section 1.2. Un archetype est l’autre moitié de la promesse : une forme, dont on fait autant d’exemplaires qu’on veut.

archetype Personnage {
    prenom: str;
    energie: int;
}

@entry(demarrer)
object MonProgramme {
    demarrer() {
        var simon := Personnage(prenom: "Simon Magus", energie: 10);
        var helene := Personnage(prenom: "Hélène", energie: 7);

        Console.print(text: $"{simon.prenom} : {simon.energie}");
        Console.print(text: $"{helene.prenom} : {helene.energie}");
    }
}

La forme

archetype Personnage {
    prenom: str;
    energie: int;
}

Deux champs, chacun avec son nom et son type — la même écriture que les paramètres d’une méthode. L’archetype ne contient encore aucune valeur : il dit seulement de quoi un Personnage est fait. C’est un moule, pas une statue.

Les exemplaires

var simon := Personnage(prenom: "Simon Magus", energie: 10);
var helene := Personnage(prenom: "Hélène", energie: 7);

Le nom de l’archetype, suivi des champs nommés — l’écriture de la 1.2.1, appliquée aux champs. Chaque appel fabrique un exemplaire neuf, avec ses propres valeurs : Simon et Hélène ne partagent rien. On lit un champ par le point : simon.prenom.

Pas de mot-clé pour construire : nommer la forme suffit.

Un champ omis vaut zéro

Construisez sans donner l’énergie :

var simon := Personnage(prenom: "Simon Magus");

Le programme tourne, et simon.energie vaut 0. La construction n’exige pas tous les champs — ce qui n’est pas donné prend le marqueur d’absence, le même zéro que la section 5.2 invoquait pour les retours. Un texte omis est la chaîne vide, un nombre omis est zéro : rien n’apparaît sans origine.

= compare l’identité, pas le contenu

Deux exemplaires construits avec les mêmes valeurs restent deux exemplaires :

var a := Personnage(prenom: "Simon Magus", energie: 10);
var b := Personnage(prenom: "Simon Magus", energie: 10);

a = b rend false. C’est le contraire des textes, que la section 3.1 compare par leur contenu — deux instances ne sont égales que si ce sont la même. Comparer des personnages champ par champ, c’est à vous de l’écrire, avec ce que vous savez déjà.

À vous

  • Ajoutez un troisième personnage et affichez-le.
  • Omettez energie: à la construction de Simon : zéro, sans erreur.
  • Écrivez if (simon = helene) puis if (simon = simon) : la première est fausse, la seconde vraie. = demande « est-ce le même ? », jamais « se ressemblent-ils ? ».
  • Un Personnage(prenom: "X", energie: 10) = Personnage(prenom: "X", energie: 10) — deux exemplaires tout neufs, identiques champ à champ : toujours false.