En regardant ce tutoriel de CoffeeScript: http://jashkenas.github.com/coffee-script/
Je ne vois pas ce que les Splats sont pour. Quelle est cette construction? D'où vient-il (historiquement)
Le terme «opérateur splat» provient de Ruby, où le caractère *
(parfois appelé «splat» – voir l'entrée Jargon File ) permet d'indiquer qu'une entrée dans une liste d'arguments devrait "imbuter" une liste d'arguments.
CoffeeScript a adopté des splats de style Ruby très tôt (voir problème 16 ), mais à la suggestion de Douglas Crockford, la syntaxe a été changée de *x
à x...
quelques semaines plus tard (voir le problème 45 ). Néanmoins, CoffeeScripters fait toujours référence à la syntaxe comme "splat" ou "splat operator".
Quant à ce qu'ils font réellement, les splats coupent l'objet arguments
de telle sorte que l'argument splatted devienne un tableau de tous les arguments «supplémentaires». L'exemple le plus trivial est
(args...) ->
Dans ce cas, args
sera simplement une copie de tableau des arguments
. Les arguments éclatés peuvent venir soit avant, après, soit entre arguments standard:
(first, rest...) -> (rest..., last) -> (first, rest..., last) ->
Dans les deux premiers cas, si la fonction reçoit 0-1 arguments, le rest
sera un tableau vide. Dans le dernier cas, la fonction doit recevoir plus de 2 arguments pour que le rest
soit non vide.
Étant donné que JavaScript n'autorise pas les signatures multiples pour les fonctions avec le même nom (la manière dont C et Java le font), les splats sont un énorme gain de temps pour traiter différents nombres d'arguments.
Si vous connaissez python, args...
approximativement similaire à *args
, car il vous permet de traiter les paramètres de fonction en tant que liste
par exemple:
concat = (args...) -> args.join(', ') concat('hello', 'world') == 'hello, world' concat('ready', 'set', 'go!') == 'ready, set, go!'
Il fonctionne également dans les assombrations:
[first, rest...] = [1, 2, 3, 4] first == 1 rest == [2, 3, 4]
Splats est le terme pour l'utilisation de ...
opérateur pour var-args (fonctions qui prennent un nombre variable d'arguments).
Je pense que c'est un sucre syntaxique pour l'objet des arguments de javascript.
L'idée peut venir avec l' opérateur splat de ruby *
.