Coffeescriptを試してみた
CoffeeScriptとは?
CoffeeScriptは簡単ていうとJavaScriptをシンプル化した言語です。しかし、CoffeeScriptは直接ブラウザやnode.jsでは実行できません。一回JavaScriptにコンパイルしなければなりません。なので、CoffeeScriptはJavaScriptを書くための言語です。
CoffeeScriptの必要性?
CoffeeScriptはRubyやPythonなどを参考していて、今風の文法は結構書きやすいです。そして、JavaScriptのややこしいところ(classのコンセプトがないとか)を補完しています。
しかし、CoffeeScriptはsassみたいに、コンパイルしないとほぼ意味ないので、「俺はJavaScript書けるから、何でCoffeeScriptで書かないといけないの?」とかいう方いるだろうし(自分はそうだった)、チームワークになると、みんなCoffeeScriptを勉強しなければならないし、なかなか難しいところです。
基本文法
CoffeeScriptは自分の文法を持っています。しかし、JavaScriptの文法もすべて使えます。CoffeeScriptはインデントをサポートしていません、すべてスペースに変換しないとうまくコンパイルされないので、エディターの設定をチェックしましょう。
コメント
変数
CoffeeScriptで変数を定義するには、JavaScriptのvar
はいらないです。
CoffeeScriptはグロバール変数を廃棄しました。もしどうしても使いたい場合は、ルートスコープで下記のように、変数を宣言します:
すると、glob.banana
はグローバル変数と同じ機能します。
関数
JavaScriptのfunction
は、CoffeeScriptで非常にシンプルになりました。
もしfunction
の引数がない場合は、省略できます:
これをJavaScriptで解釈すると:
コンディション
CoffeeScriptは===
や!==
の代わりにis
とisnt
を使っています。==
と!=
はあまりおすすめしません(もちろん、使えますが)。そして、否定の!
はCoffeeScriptでnot
というアリアスも使います。
上記の文を一行で完結したければ、then
を使います。
CoffeeScriptはRubyみたいに、if
は後ろ置きでもできます。
unless
も使えます(if not
と同じ意味)
ループ
CoffeeScriptは素晴らしいイテレータがあります。例えば:
もっとシンプルすると:
とも書ける。パッと見ると、わけわからないかもしれないが。読むときは、右から読めばわかりやすいです、まずfor fruit in ['apple', 'bananer', 'pear']
で['apple', 'bananer', 'pear']
中の要素を一つずつ抽出し、fruit
に保存し、console.log(fruit)
に渡します。
もしインデックスを取得したければ
ハッシュタイプの配列のイテレータも簡単!
OOP
CoffeeScript一番便利なところは、はっきりしたclass
のコンセプトがあるところです。JavaScriptにclass
というものはないだが、class
らしいものが作れます。たとえば:
このPlayer
がJavaScriptのclass
になります。
CoffeeScriptだと、もっと「きれい」な書き方ができます。
constructor
の中に@
をつければ、クラスのメンバー変数になります。
同じ感じで、メソードを追加します。
staticメンバーは、class
のスコープで@
を付けて定義します。
@
はJSでというとthis
と似てます。なので、スコープによって意味が変わるので、要注意です。@
がconstructor
のスコープではメンバー変数になりますが、class
スコープではスタティックメンバーになります。
まとめ
CoffeeScriptは非常に使いやすくて、効率も良いし、コンパイルすれば純正のJavaScriptになるので、互換性にも心配ありません。もちらん、CoffeeScriptに慣れちゃったら、普通のJSが書けなくなってしまう可能性もあります。例えば、var
と;
を忘れたりするとかもあり得ることです。なので、自分のJSに自信があってからCoffeeScriptを書くのをおすすめします。