CoffeeScript:
The Great Parts
(abridged)
An introduction to my two favorite CoffeeScript features:
Destructuring Assignment
Comprehensions
But first...
A Brief Intro to CoffeeScript
In 11 days, a guy wrote the worst.language.ever

Years later, another guy was like: "Dude, SO NOT the worst language ever. I wrote a book."

And most people were like:

...still the worst.
...but this guy. He was really like: "OMG. That totes IS a cool story, bro."

So, he wrote CoffeeScript

...and this is what it does
You write CoffeeScript
class Person
and CoffeeScript writes JavaScript that
the "I wrote a book" guy would have
var Person; Person = (function() { function Person() {} return Person; })();
To learn more
http://coffeescript.org/
So, Comprehensions and Destructuring Assignment...
Big words
My Goal:
To give you simple definitions of these terms and give you enough info that you can (somewhat painlessly) read the docs
Destructuring Assignment
Easy in. Easy out.
Let's start
food = 'toast'aFood = foodconsole.log aFood# 'toast'
What about arrays?
foods = ['toast', 'cheese', 'wine']theFood = foodsconsole.log theFood# ['toast', 'cheese', 'wine']
...and if i want contents?
foods = ['toast', 'cheese', 'wine']first = foods[0]console.log first# 'toast'
Let's try CoffeeScript
foods = ['toast', 'cheese', 'wine']first = foods[0]console.log first# 'toast'
Strip the accessor on `foods`
foods = ['toast', 'cheese', 'wine']first = foodsconsole.log first# ['toast', 'cheese', 'wine']
and put it on you `first`
foods = ['toast', 'cheese', 'wine'][first] = foodsconsole.log first# 'toast'
Let's grab the rest
foods = ['toast', 'cheese', 'wine'][first, second, third] = foodsconsole.log first, second, third# toast cheese wine
Let's try and object
foods = {carb: 'toast', fat: 'cheese', beverage: 'wine'}carb = foods.carbconsole.log carb# 'toast'
Lose the message to food
foods = {carb: 'toast', fat: 'cheese', beverage: 'wine'}carb = foodsconsole.log carb# {carb: 'toast', fat: 'cheese', beverage: 'wine'}
wrap our `carb` in {}
foods = {carb: 'toast', fat: 'cheese', beverage: 'wine'}{carb} = foodsconsole.log carb# 'toast'
Let's get the rest...
foods = {carb: 'toast', fat: 'cheese', beverage: 'wine'}{carb, fat, beverage} = foodsconsole.log carb, fat, beverage# 'toast cheese wine'
...and nesting works!
foods = {carb: 'toast', fat: 'cheese', beverage: ['wine', 'coffee']}{carb, fat, beverage:[firstBev, lastBev]} = foodsconsole.log carb, fat, firstBev, lastBev# 'toast cheese wine coffee'
Comprehensions
Smart loops
Let's start
for(var i = 1; i <= 10; i++) {log(i);}// The same for loop we've had for 40 years
(), {} — get out of here!
for var i = 1; i <= 10; i++log i ;
var, ; — see ya!
for i = 1 i <= 10 i++log i
strip out the extra i's
for i = 1 <= 10log i
make 1-10 a range
for i [1..10]log i
...and tell our loop to use it
for i in [1..10]log i
Boom, CoffeeScriptin'
for i in [1..10]log i
again... Javascript
for(var i = 1; i <= 10; i++) {log(i);}
CoffeeScript
for i in [1..10]log i
Let's play with food again...
foods = ['toast', 'cheese', 'wine']for food in foodseat food
We can remove our action
foods = ['toast', 'cheese', 'wine']for food in foodseat food
and put if before our loop.
foods = ['toast', 'cheese', 'wine']eat food for food in foods
and put if before our loop.
foods = ['toast', 'cheese', 'wine']eat food for food in foods
What about conditionals?
foods = ['toast', 'cheese', 'wine']eat food for food in foods
Append them to your loop
foods = ['toast', 'cheese', 'wine']eat food for food in foods when food isnt 'wine'
Append them to your loop
foods = ['toast', 'cheese', 'wine']eat food for food in foods when food isnt 'wine'
How does assignment work?
foods = ['toast', 'cheese', 'wine']aFood = food for food in foods when food isnt 'wine'# ?
How does assignment work?
foods = ['toast', 'cheese', 'wine']aFood = food for food in foods when food isnt 'wine'# aFood = 'cheese'
Add parens to collect()
foods = ['toast', 'cheese', 'wine']aFood = (food for food in foods when food isnt 'wine')# ?
Add parens to collect()
foods = ['toast', 'cheese', 'wine']aFood = (food for food in foods when food isnt 'wine')# aFood = ['toast', 'cheese']
The hardest part to comprehensions is the syntax.
How would Xzibit remember...
Peep mo'
http://coffeescript.org/#destructuring
@chantastic
CoffeeScript: The Great Parts
By Michael Chan
CoffeeScript: The Great Parts
- 2,511


