コマンド
coffee
コマンド
オプション | 内容 |
---|---|
-i | インタプリタ起動 |
-c | コンパイル |
-l | 構文チェック |
-o | ファイル出力する |
-w | ソースの監視と自動リコンパイル |
-p | 標準出力する |
-e
|
evalする |
-r | 依存するライブラリの読込 |
-v | バージョン |
構文
コメント
-
#
: 単行コメント# 単行コメントはjsへの変換時に消える
-
###
: 複数行コメント### 複数行コメントはこのように書く このコメントはjsへの変換後も/* */ の形で残る ###
変数宣言
-
var
: 宣言は必須ではない -
?=
: デフォルト値の設定が可能# 変数がundefinedまたはnullの場合のみ代入する i ?= 123
文字列リテラル
-
”#{val}”
: 変数展開result = 123 msg = ‘result: #{result}’
-
””” … “””
: ヒアドキュメントlongmsg = “”” a b c “””
真偽値リテラル
-
true/false以外の真偽値リテラルが使える
isReady = yes # yes/no someFlag = on # on/off
配列リテラル
-
範囲演算子が使える
x = [0…5] # [0, 1, 2, 3, 4, 5]となる
論理演算子
- 三項演算子は使えない
- 等価演算子
==
は使えない -
英文形式の論理演算子を使える
a is b # a === b a isnt b # a !== b not c # !c a and b # a && b a or b # a || b a? # aがundefinedでもnullでもない場合に真
-
演算子の連結が可能
a < b < c # a<b && b<c と書かなくていい
制御構文
if / unless
- 括弧は必須でない
-
ブロックではなくインデントで表現する
if x is y foo() else bar()
-
単行で書く場合は
then
を使うif x is y then foo() else bar()
-
後置構文も使える
foo() if x is y
-
unless(ifの否定)も使える
unless(x is y) foo()
switch
- caseではなく
when
を使う - defaultではなく
else
を使う -
break
は明示不要
switch x
when 0:
when 1:
when 2:
while / until
- untilはwhileの否定形
-
後置構文が使える
foo while a is b
for~of
-
for~of
: ハッシュに対するイテレーションfor key, val of hash foo key, val
関数
-
呼出時に関数の括弧は必須でない(ruby式)
someFunc ‘a’, ‘b’, ‘c’
定義時は
() ->
を使う-
returnの明示は不要(最後の式文の評価値が返る)
foo = (a, b, c)-> a + b + c
-
デフォルト引数が使える
foo = (flagged=true)-> # …
-
可変長引数が使える
foo = (list…) -> # …
オブジェクト
-
?
: 対象の関数/メソッド/プロパティが存在する場合のみ実行someFunc?() foo?.bar
クラス
-
class
,constructor
などOOP系の予約語が使えるclass Foo constructor: (@bar, @baz)-> # プロトタイプメンバ someProp: ‘bar’ someFunc: ()-> alert ‘someFunc’ # クラスメンバ @someConst: ‘CONST’ @someStatic: ()-> alert ‘someStatic’
extends
,super
も利用可能-
@
はthisと等価class Foo some: -> alert @message # this.messageに相当
スコープ
CoffeeScriptファイルは、コンパイルされた時点でファイル別に即時関数でラップされる。そのためデフォルトでは、スクリプト間のアクセスはできない。
アクセスの許可はwindowオブジェクトへのプロパティの追加で対応する
class Cafe
# …
# これでグローバルになる
window.Cafe = Cafe