なぜ CoffeeScript がダメか - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtechについて。
いや、本当はこのタイトルにするほど CoffeeScript 推しているわけではないのですが、まあそういう建前で書きます。
CoffeeScript のメリット
簡潔に書ける
簡潔であるということは、ソースコードにおいて、本質ではない部分を書かなくてよいということで、逆に言えば必要なことだけが書かれている状態に近くなります。少し慣れればむしろ読みやすくなる(と思います)。
JavaScript の罠を回避できる
var を忘れた変数がグローバル変数になるとか、変数のホイスティングとか、オブジェクトリテラルの最後のカンマとか、 JavaScript の for in は prototype を辿ってしまう問題とか、JavaScript の等価演算子が曖昧すぎて嵌りやすい問題とかとか、 CoffeeScript を使うだけで回避できる問題が結構あります。読む側(レビューする側)としても、注意する部分が少ないのでだいぶ楽になります。
書き方がある程度統一される
インデントが半強制的に揃う。また CoffeeScript を書く場所は実質外部ファイルなので(インラインに CoffeeScript を書く選択肢もないわけではない。 Rails だと coffee-filter とか Barista とか)、インラインにコードを書かれにくくなる。(まあ、 JavaScript で書いちゃえば元も子もないんだけど)
CoffeeScript のデメリット
デバッグしにくい
CoffeeScript のままデバッグできるようになる予定はあるが、今のところ JavaScript として出力されたコードをデバッグすることになる。ある程度長いコードになるとデバッグが大変になってきます。
記号が多めだけど、中途半端
-> や => 、 @ など、記号中心と思わせつつ、3項演算子は if ~ then ~ else ~ と書かなければいけなかったりします。3項演算子のイマイチ感は特に強いですね。
将来的に廃れる可能性がある
現在、 ECMAScript6 とかその先の未来の JavaScript について議論が進められており、そこでの CoffeeScript の影響力はすごく大きくなっています。ただ、大きいがゆえに、 ECMAScript が CoffeeScript に近づいていく方向になってきています。というと、 CoffeeScript の長所に聞こえるかもしれませんが、実際は CoffeeScript そのものが採用されるわけではないので、 CoffeeScript は ECMAScript に似た中途半端な言語となってしまう可能性が高くなっています(というような話を edvakf さんが)。
メリットでもデメリットでもないあたり
個人的にポイントなのは、生成される JavaScript がかなり読みやすくて、比較的きれいな JavaScript が生成されるところにあると思っています。 GWT や Dart がはき出す JavaScript はとても人間が読み書きできるレベルではないですが、 CoffeeScript の生成する JavaScript はその正反対です。なので、デバッグは思ったほど大変ではないし、あとで CoffeeScript をやめたくなったら生成された JavaScript に乗り換えるだけでよいのです。極端なことを言えば、CoffeeScript はプロトタイピングだけに使って、メンテナンスは JavaScript の状態で行う運用だって可能です。
なので、今だからこそ CoffeeScript を触ってみるのがいいんじゃないかと思っています。 ECMAScript6 の先取りもできますしね。正直 CoffeeScript がベストとは思ってませんし、この先 CoffeeScript をやめるかもしれませんが、そのときは書きだした JavaScript をコミットし直すだけです。安心して触ってみましょう。