Syntaxe méthode & l'opérateur point
Le point marche sur toutes les valeurs, et fait ce qu'on attend :
| Expression | Ce qu'elle fait |
|---|---|
obj.methode(args) | Appelle la méthode d'un objet, avec self = obj |
obj.champ | Lit un champ d'un objet |
dict.cle | Lit une clé d'un dict (nil si absente) |
module.fn(args) | Appelle une fonction d'un module importé avec IMPORT://x as module |
valeur.fn(args) | Tout le reste : appelle la fonction fn(valeur, args) |
La dernière ligne s'appelle la syntaxe d'appel uniforme : x.f(a, b) est identique à f(x, a, b) dès que x n'a pas de méthode ou de clé f. Toute fonction — native ou la tienne — peut donc s'utiliser comme une méthode, et les appels s'enchaînent de gauche à droite au lieu de s'imbriquer :
// Le même calcul, deux fois :
print(join(map(filter(split("5,12,8,30", ","), s => num(s) > 6), s => "#" + s), " "))
print("5,12,8,30".split(",").filter(s => num(s) > 6).map(s => "#" + s).join(" "))
// #12 #8 #30
ton.function shout(s) { return s.upper() + "!" }
print("hello".shout()) // HELLO!
print([3, 1, 2].sort().reverse()) // [3, 2, 1]
print(" padded ".trim().padStart(10, "."))
.length existe aussi comme propriété sur les chaînes et les tableaux ("abc".length vaut 3).