CoffeeScriptの書き方


基礎

変数の宣言

string = 'abc'
float = 123
boolean = true

varとセミコロンが消えます

コメント

# 1行のコメント

###
複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント複数行のコメント
###

配列

array = [
    'aaa'
    'bbb'
    'ccc'
]

カンマの代わりに改行を使う

オブジェクト

obj = {
    a: 111
    b: 222
    c: 333
}

配列と同様にカンマの代わりに改行を使う

制御文

val = 10
if val is 10
    console.log '10'
else
    console.log 'not 10'

条件式を()でくくらない、if文の中身を{}でくくらない

array = [
    a
    b
    c
]

for string in array
    console.log string

関数

test = -> 
    console.log 'test'

test変数に無名関数を代入することで、test関数として実行できるようになる。

number = '2'

test = (number)->
    console.log 'test' + number

test(number)

引数を指定したい場合は ->の前に()をつけ、引数を指定します。

->と=>の違い

class Hello
  constructor: (@name) ->
    result = $('#result')
    result.on 'click', ->
      alert 'こんにちは'+@name

h = new Hello('Aさん')

これの結果は、こんにちはundefinendになってしまいます。原因は、初めの@はオブジェクト自身を指しているが、次の@はイベントの発生元である、要素オブジェクトを指しているからです。
この問題を解消するのが=>です。これを使うと=>の外側で使っている@をそのまま関数の内側でも使えるようになります。