i = 10
str = "hello world"
[firstName, lastName] = ["kang", "wang"]
fn = (param) - ...
fn = (parm1, parm1, params...) ->
...
params = ["value1", "value2", "value3", "value4"]
fn(params)
fn("value", params)
fn("value", "value", params)
arr = [
"element1"
"element2"
]
obj =
first: 1
second:
second_1: 1
second_2: 2
third: 3
$('.element').attr class: "active"
outter = 10
scope = ->
inner = 10
outter = 20
inner = 20
str = "variable 1: #{var1}, function 1 returns: #{fn()}"
str = "
today is Sunday
so tomorrow is
Monday
"
htmlTpl = """
<html>
<body>
<h1>Hello World</h1>
</body>
</html>
"""
[var1, var2] = [value1, value2]
{firstName, lastName} = {firstName: "Kang", lastName: "Wang"}
location () ->
["US", "LA", "Berkly"]
[county, province, city] = location()
[start, end] = "hello, world".split ","
[start, ..., end] = [1, 2, 3, 4, 5]
class Person
constructor: (options) ->
{@name, @age, @height} = options
tim = new Person age: 4
"do something" if true
if true and true
"do something"
else
"do other things"
if true then "do something" else "do other things"
print ele for ele in [1, 2, 3, 4]
prints i, ele for ele in [1, 2, 3, 4]
print ele for ele in [1, 2, 3, 4] when ele / 2 != 1
countDown = (num for num in [10 .. 1] by 2)
prints k, v for k, v of kid
print ele until ele > 10
print ele while ele > 10
for filename in list
do (filename) ->
fs.readFile filename, (err, contents) ->
compile filename, contents.toString()
for ele in [1, 2, 3, 4]
do print ele
try
fn(1)
catch error
error
finally
then
numSerials = [10 .. 0]
start = numSerials[0..2]
end = numSerials[0..-2]
end = numSerials[..]
umSerials[0..2] = [1, 2, 3]
globals = (name for name of window)[0...10]
solipsism = true if mind? and world?
speed = 0
speed ?= 15
footprints = yeti ? "bear"
kid.brother?.sister
switch day
when "Mon" then ""
when "Tue" then ""
else "WTF"
day = switch day
when "Mon" then ""
when "Tue" then ""
else "WTF"
Account = (customer, cart) ->
@customer = customer
@cart = cart
$('.shopping_cart').bind 'click', (event) =>
@customer.purchase @cart
Account2 = (customer, cart) ->
@customer = customer
@cart = cart
$('.shopping_cart').bind 'click', (event) ->
@customer.purchase @cart
Array::map = ->
"..."
cholesterol = 127
healthy = 200 > cholesterol > 60
OPERATOR = /// ^ (
?: [-=]> # function
| [-+*/%<>&|^!?=]= # compound assign / compare
| >>>=? # zero-fill right shift
| ([-+:])\1 # doubles
| ([&|<>])\2=? # logic / shift
| \?\. # soak access
| \.{2,3} # range or splat
) ///
fn = `function fn() {}`
CoffeeScript JavaScript
is ===
isnt !==
not !
and &&
or ||
true, yes, on true
false, no, off false
@, this this
of in
in no JS equivalent
a ** b Math.pow(a, b)
a // b Math.floor(a / b)
a %% b (a % b + b) % b
moduleKeywords = ['extended', 'included']
class Trait
@mixin: (obj) =>
for key, value of obj when key not in moduleKeywords
@::[key] = value
obj.with?.apply(@)
this
@with: (objs ...) ->
@mixin obj for obj in objs
MongoDao =
find: () -> console.log("find items in mongo")
create: () -> console.log("delete item in mongo")
class UserDao extends Trait
@with Daoable, MongoDao