Syntaxe méthode & l'opérateur point

Le point marche sur toutes les valeurs, et fait ce qu'on attend :

ExpressionCe qu'elle fait
obj.methode(args)Appelle la méthode d'un objet, avec self = obj
obj.champLit un champ d'un objet
dict.cleLit 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).

Modifier cette page sur GitHub