Section 6.3

Un tableau en paramètre

Le type tableau écrit en toutes lettres, et l'absence de symbole variadique — une valeur seule s'enveloppe toute seule.

Une méthode peut recevoir un tableau entier. Il suffit d’en écrire le type.

@entry(demarrer)
object MonProgramme {
    demarrer() {
        Console.print(text: $"total : {self.somme(valeurs: [12, 19, 7])}");
        Console.print(text: $"total : {self.somme(valeurs: 5)}");
    }

    somme(valeurs: [int]) -> int {
        var total := 0;

        for valeur in valeurs {
            total := total + valeur;
        }

        return total;
    }
}

[int] est un type

somme(valeurs: [int]) -> int {

Les crochets, autour d’un type plutôt qu’autour de valeurs, forment le type tableau. [int] se lit « tableau d’entiers » ; [str] serait un tableau de textes. C’est le type que le compilateur déduisait déjà tout seul en 4.3 quand vous écriviez var mesures := [12, 19, 7] — il porte simplement un nom, maintenant qu’il faut l’écrire.

Le corps de somme ne fait rien de nouveau : un for … in de la 4.3, un total accumulé, un return de la 5.1. Ce qui est neuf, c’est que la méthode travaille sur des valeurs qu’elle n’a pas écrites elle-même.

Une valeur seule s’enveloppe toute seule

Regardez le second appel :

self.somme(valeurs: 5);

5 n’est pas un tableau, et pourtant l’appel passe — il rend 5. Un paramètre typé [int] accepte directement une valeur simple, que le compilateur enveloppe en tableau d’un élément.

C’est la réponse d’Archon à ce que d’autres langages écrivent avec des points de suspension ou un mot-clé dédié : il n’y a pas de symbole variadique dans ce langage. Un paramètre tableau suffit, et le cas à un seul élément se passe sans cérémonie.

Les crochets restent obligatoires dès qu’il y a plus d’un élément. L’enveloppement n’est une commodité que pour la valeur seule ; deux valeurs demandent le tableau écrit en toutes lettres, [12, 19], sans quoi la seconde n’a nulle part où aller.

À vous

  • Passez valeurs: [5] au second appel : le même résultat, écrit explicitement. C’est ce que l’enveloppement fabrique pour vous.
  • Passez un tableau vide, valeurs: []. La somme rend 0 — la boucle ne fait aucun tour, et total sort comme il est entré.
  • Écrivez maximum(valeurs: [int]) -> int qui rend la plus grande des valeurs. Un indice : la méthode de la 5.1 s’appelait déjà maximum, mais celle-ci ne prend qu’un argument.
  • Ajoutez un second paramètre à somme, avec une valeur par défaut, qui s’ajoute au total.