En regardant ce tutoriel CoffeeScript: http://jashkenas.github.com/coffee-script/
Je ne vois pas vraiment à quoi servent les Splats. Quelle est cette construction? D'où cela vient-il (historiquement)
Le terme "opérateur splat" vient de Ruby, où le *
le caractère (parfois appelé "splat" - voir l'entrée du fichier de jargon ) est utilisé pour indiquer qu'une entrée dans une liste d'arguments doit "absorber" une liste d'arguments.
CoffeeScript a adopté très tôt les splats de style Ruby (voir numéro 16 ), mais à la suggestion de Douglas Crockford, la syntaxe a été modifiée de *x
à x...
quelques semaines plus tard (voir numéro 45 ). Néanmoins, CoffeeScripters se réfère toujours à la syntaxe comme "splat" ou "opérateur splat".
Quant à ce qu'ils font réellement, les splats coupent l'objet arguments
de telle manière que l'argument splatté 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 de arguments
. Les arguments dispersés peuvent venir avant, après ou entre les arguments standard:
(first, rest...) ->
(rest..., last) ->
(first, rest..., last) ->
Dans les deux premiers cas, si la fonction reçoit 0-1 arguments, rest
sera un tableau vide. Dans le dernier cas, la fonction doit recevoir plus de 2 arguments pour que rest
soit non vide.
Étant donné que JavaScript n'autorise pas plusieurs signatures pour des fonctions portant le même nom (comme le font C et Java do), les splats sont un énorme gain de temps pour traiter un nombre variable d'arguments.
si vous connaissez python, args...
à peu près similaire à *args
, car il vous permet de traiter les paramètres de fonction comme une liste
par exemple:
concat = (args...) -> args.join(', ')
concat('hello', 'world') == 'hello, world'
concat('ready', 'set', 'go!') == 'ready, set, go!'
cela fonctionne aussi en affectations:
[first, rest...] = [1, 2, 3, 4]
first == 1
rest == [2, 3, 4]
Splats est le terme pour l'utilisation du ...
opérateur pour var-args (fonctions qui prennent un nombre variable d'arguments).
Je pense que c'est un sucre syntaxique pour l'objet arguments de javascript.
L'idée peut venir de Ruby opérateur splat *
.