Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does "Splats" mean in the CoffeeScript tutorial?

Looking at this CoffeeScript tutorial : http://jashkenas.github.com/coffee-script/

I don't quite see what the Splats is for. What is this construction? Where does it come from (historically)

like image 846
interstar Avatar asked Jun 01 '11 13:06

interstar


People also ask

What is splat in code?

The term "splat operator" comes from Ruby, where the * character (sometimes called the "splat"—see the Jargon File entry) is used to indicate that an entry in an argument list should "soak up" a list of arguments.

Is CoffeeScript easy?

CoffeeScript is a lightweight language that compiles into JavaScript. It provides simple and easy to learn syntax avoiding the complex syntax of JavaScript.

Is CoffeeScript better than JavaScript?

"Easy to read", "Faster to write" and "Syntactic sugar" are the key factors why developers consider CoffeeScript; whereas "Can be used on frontend/backend", "It's everywhere" and "Lots of great frameworks" are the primary reasons why JavaScript is favored.

What is CoffeeScript language?

CoffeeScript is a programming language that compiles to JavaScript. It adds syntactic sugar inspired by Ruby, Python, and Haskell in an effort to enhance JavaScript's brevity and readability. Specific additional features include list comprehension and destructuring assignment.


1 Answers

The term "splat operator" comes from Ruby, where the * character (sometimes called the "splat"—see the Jargon File entry) is used to indicate that an entry in an argument list should "soak up" a list of arguments.

CoffeeScript adopted Ruby-style splats very early on (see issue 16), but at Douglas Crockford's suggestion, the syntax was changed from *x to x... a couple of weeks later (see issue 45). Nevertheless, CoffeeScripters still refer to the syntax as the "splat" or "splat operator."

As to what they actually do, splats slice the arguments object in such a way that the splatted argument becomes an array of all "extra" arguments. The most trivial example is

(args...) -> 

In this case, args will simply be an array copy of arguments. Splatted arguments can come either before, after, or between standard arguments:

(first, rest...) -> (rest..., last) -> (first, rest..., last) -> 

In the first two cases, if the function receives 0-1 arguments, rest will be an empty array. In the last case, the function needs to receive more than 2 arguments for rest to be non-empty.

Since JavaScript doesn't allow multiple signatures for functions with the same name (the way C and Java do), splats are a huge time-saver for dealing with varying numbers of arguments.

like image 108
Trevor Burnham Avatar answered Oct 05 '22 01:10

Trevor Burnham