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, ettotalsort comme il est entré. - Écrivez
maximum(valeurs: [int]) -> intqui 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.