文字列の連結が楽
"#{user.name}さんが路上で肉を食べている"
みたいに書ける。一般的にjqueryをつかってクライアントに近いjsを書いてる場合、セレクタを動的に記述するケースはとても多いと思う。そういう時に非常に強力な武器になる。
$.find("p[data-id=#{user.id}][data-name=#{user.name}]")
ヒアドキュメントが書ける
"""
#{user.name}さんがいきなり踊りだした。
春なので仕方ないが、さすがにズボンは履いてほしい。
ああ、遠くからサイレンの音が聞こえる。
"""
ちょっとした部分テンプレートを書いたりするときに便利で、終了時にインデントしてても大丈夫。
html = """
<p data-name data-id>
<span></span>
</p>
"""
で、こういうシンタックスあれこれは公式サイトにちゃんと書いてあるので全部目を通してからつかいましょう。大した量はないので学習コスト云々は全然気にしなくていいし、結果的にコード量を削減できるからすぐ元が取れる。
まあしかし最終的に本番環境だったらjavascriptをuglifyすると思うので、サイトをつかう人間からしたらその元がcoffeeだろうが生jsだろうがどっちでもいいわ、難読化読みにくいわ、安全な実装かどうか判断しにくいわ、っていう結論になるしメンテする人間が使いやすいほうを選択すればいいんじゃないすかね、という話だと思っている。
今後ブラウザにcoffeeの変換エンジンが標準で積まれるようになって、text/coffeescript が主流になるようなことがあれば変わってくるのかな?インデントが意味を持つから難読化(によるファイルサイズ削減)に現状ほど価値がなくなるし、他人のサイトのjsを読むという趣味のある人間がその内容を把握しやすくなる。結果的に危険な実装は減りそうだと思う。
coffeescriptがコンパイル時に文脈から判断して危険な変数を出力仕様としてるところをデフォルトでHTMLエスケープしたりencodeURIcomponentしてくれるみたいな未来を想像しています
— hanagemanさん (@hanageman69) 4月 2, 2012
個人的に期待していたのはこういう展開だったんだけど、なんか closure templatesが既にそういうことをやってるみたいで全然未来の話ではなかった。あとで試そうと思う。トランスレータひとつ挟むだけで簡単な記述ができて、かつセキュリティ的にもより安全になるっていうのはいい話ですね。