Rendre une valeur
Une flèche, un return, et l'appel cesse d'être une simple action pour devenir une valeur.
Une méthode peut rendre une valeur à qui l’appelle. Il lui faut deux choses : dire de quel type, et la rendre.
@entry(demarrer)
object MonProgramme {
demarrer() {
var plusGrand := self.maximum(a: 12, b: 7);
Console.print(text: $"le plus grand : {plusGrand}");
Console.print(text: $"et entre 3 et 9 : {self.maximum(a: 3, b: 9)}");
}
maximum(a: int, b: int) -> int {
if (a > b) {
return a;
}
return b;
}
}
La flèche annonce, return livre
maximum(a: int, b: int) -> int {
La flèche -> suit la liste des paramètres et annonce le type de ce que la méthode rendra. Ici
un int — le type que la section 2.3 recommande quand vous voulez simplement un entier.
return livre la valeur et quitte la méthode sur-le-champ. Ce qui suit dans le corps n’est
pas exécuté. C’est pourquoi maximum n’a pas besoin de else : si a > b tient, le premier
return part avec a et la dernière ligne n’est jamais atteinte.
Une méthode sans flèche ne rend rien, et c’est le cas de toutes celles écrites jusqu’ici —
demarrer, saluer. Rien ne change pour elles. return y reste possible, seul et sans valeur :
il sert alors à sortir plus tôt.
L’appel devient une valeur
C’est le vrai changement. Jusqu’ici un appel ne pouvait qu’agir ; il tenait une ligne à lui seul et c’était tout. Un appel qui rend une valeur se met partout où une valeur se met :
var plusGrand := self.maximum(a: 12, b: 7);
Console.print(text: $"et entre 3 et 9 : {self.maximum(a: 3, b: 9)}");
À droite d’un :=, dans un trou d’interpolation, comme argument d’un autre appel. Le programme
peut enfin calculer ailleurs que dans demarrer et rapporter le résultat.
Il n’y a pas de fonction libre
Une méthode se déclare à l’intérieur d’un objet, jamais seule au niveau du fichier. C’est
pour ça que maximum est écrite dans MonProgramme, entre les mêmes accolades que demarrer,
et que demarrer l’appelle par self.maximum(…) — self désigne l’objet lui-même, comme la
section 1.2.1 le notait en passant.
Aucun mot-clé ne déclare une méthode : un nom, des paramètres entre parenthèses, la flèche s’il y a lieu, un corps. C’est tout ce qui la distingue du reste.
À vous
- Changez le premier appel en
a: 12, b: 70: la réponse suit, sans qu’on ait touché àmaximum. - Glissez
Console.print(text: "jamais");juste après le premierreturn. Le programme tourne et n’affiche rien de neuf — mais le compilateur ne vous laisse pas croire que cette ligne compte :warning[W002]: unreachable statement: the previous one leaves the block. - Écrivez une méthode
doubler(valeur: int) -> intqui rendvaleur * 2, et affichezself.doubler(valeur: self.maximum(a: 12, b: 7))— 24. Un appel qui rend une valeur peut nourrir un autre appel.