Created
December 13, 2014 15:26
-
-
Save focusj/3c33a0e966b11f9ab75c to your computer and use it in GitHub Desktop.
记录了一些CoffeeScript一些语法方便查阅
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# CoffeeScript CheetSheet# | |
## Declaration | |
### there is no vars, and no need to add ';' and the end | |
i = 10 | |
str = "hello world" | |
[firstName, lastName] = ["kang", "wang"] | |
### define a function, no need to add the keyword 'function', -> is enough | |
fn = (param) - ... | |
### Splats: define a function with multi parameters | |
fn = (parm1, parm1, params...) -> | |
... | |
params = ["value1", "value2", "value3", "value4"] | |
fn(params) | |
fn("value", params) | |
fn("value", "value", params) | |
### define an Array | |
arr = [ | |
"element1" | |
"element2" | |
] | |
### define an object | |
obj = | |
first: 1 | |
second: | |
second_1: 1 | |
second_2: 2 | |
third: 3 | |
$('.element').attr class: "active" | |
### lexical scoping and variable safity. | |
outter = 10 | |
scope = -> | |
inner = 10 | |
>> outter = 20 | |
inner = 20 | |
## String Interpolation | |
### mixin variable and function in string defination | |
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> | |
""" | |
## Destructuring Assignment | |
[var1, var2] = [value1, value2] | |
### use on object unapply | |
{firstName, lastName} = {firstName: "Kang", lastName: "Wang"} | |
### use for a function multi-returns | |
location () -> | |
["US", "LA", "Berkly"] | |
[county, province, city] = location() | |
[start, end] = "hello, world".split "," | |
### use to skip some useless bucket ... | |
[start, ..., end] = [1, 2, 3, 4, 5] | |
### destructuring constructor | |
class Person | |
constructor: (options) -> | |
{@name, @age, @height} = options | |
tim = new Person age: 4 | |
## condition control | |
### if else then | |
"do something" if true | |
if true and true | |
"do something" | |
else | |
"do other things" | |
if true then "do something" else "do other things" | |
## for loop control | |
### for loop while until | |
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) | |
### loop an object | |
prints k, v for k, v of kid | |
print ele until ele > 10 | |
print ele while ele > 10 | |
### do keywords | |
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 .. catch .. expression | |
try | |
fn(1) | |
catch error | |
error | |
finally | |
then | |
## try .. catch .. expression | |
### Array Operations | |
numSerials = [10 .. 0] | |
start = numSerials[0..2] | |
end = numSerials[0..-2] | |
end = numSerials[..] | |
umSerials[0..2] = [1, 2, 3] | |
### use expression as much as possible | |
globals = (name for name of window)[0...10] | |
## Existantial Operator ?, ?. | |
### '?' means varaible is null or undefiend | |
solipsism = true if mind? and world? | |
speed = 0 | |
speed ?= 15 | |
footprints = yeti ? "bear" | |
### '?.' usef for assessing object attribute | |
kid.brother?.sister | |
## switch when else | |
switch day | |
when "Mon" then "" | |
when "Tue" then "" | |
else "WTF" | |
day = switch day | |
when "Mon" then "" | |
when "Tue" then "" | |
else "WTF" | |
## object oriented | |
### use => to bind this in scope | |
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 | |
### bind function to an exists function | |
Array::map = -> | |
"..." | |
## some sugar | |
### chained comparasion | |
cholesterol = 127 | |
healthy = 200 > cholesterol > 60 | |
### block regular expression | |
OPERATOR = /// ^ ( | |
?: [-=]> # function | |
| [-+*/%<>&|^!?=]= # compound assign / compare | |
| >>>=? # zero-fill right shift | |
| ([-+:])\1 # doubles | |
| ([&|<>])\2=? # logic / shift | |
| \?\. # soak access | |
| \.{2,3} # range or splat | |
) /// | |
### embeded javascript | |
fn = `function fn() {}` | |
## operators and alias in CoffeeScript | |
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 | |
## multi etends example | |
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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment