LoginSignup
4
6

More than 5 years have passed since last update.

CoffeeScriptチートシート

Posted at

コマンド

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 = [05]     # [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

参考

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6