ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

CoffeeScript についての議論にリンクを貼るだけのページ += 1

前提として、 CoffeeScript は名前に反して言語じゃないので(そうぼくは思っている)、近いところで言うとコードジェネレーターとかフレームワークとか? ということであんまり宗教的にこだわるところでもなさそうで、便利な場面では使えば良いし、 JavaScript でしか表現できない箇所は素直に JavaScript で書けば良いと思う。だって、共存できるし。

http://subtech.g.hatena.ne.jp/cho45/20120402/1333366338

読みやすいとか読みにくいとかは主観っぽい(ぼくは読みにくいと感じたことがない)のでよくわからない。慣れの問題もありそう。むしろぼくは、 Java に文法の似ているプレーンな JavaScript のほうが、特にあんまり長いコードベースを読もうとすると、ウワッてなる(個人の感想です)。

デバッグとかメンテナンス性は Jasmine などがあるのである程度助けになるのかな〜? と。あと、

http://os0x.github.com/2012/04/02/why-coffee/

こちらでおっしゃる通りで、 「生成される JavaScript がかなり読みやすくて、比較的きれいな JavaScript が生成される」 のでブラウザ上でブレークポイントを打ったりする際にそんなに戸惑うことは少ない。というか基本的にはテストで覆った方が良いので、むしろ Jasmine とかの方が頑張ってほしい。ぼくは文句を言うなら CoffeeScript より Jasmine だなあ、ウッ

http://hamalog.tumblr.com/post/20353576507/coffeescript

で、こちらの方も書いている通り(というかまあ、ぼくの意見はこちらの記事の方と95%ぐらいまで一致している)、 Backbone.js というかなり普通っぽい(プロトタイプベースっぽくない) OOP を強制するフレームワークを利用する場合、 CoffeeScript でないとやってられない感じがある。

> JavaScriptにおいてクラスは、JavaScript原理主義の人にとっては、ドラキュラにニンニクを与えたように嫌がる

ということはある。プロトタイプベースの言語とオブジェクト指向の言語ははっきり区別されるべきで、実際『7つの言語 7つの世界』とかでも違うものとして扱っていたはず。「オブジェクト指向プログラミング」は、プロトタイプベースの言語にとってはただの「実現できるスタイルの一つ」に過ぎない。

一方、一般的に GUI で操作するアプリケーションを書く際は、オブジェクト指向パラダイムを採用した言語を利用するのが普通のように思われる(クライアント力低いのでモヒカンのツッコミよろです)。オブジェクト指向プログラミングで GUI を作るノウハウは一定の割合で溜まっているようだ。

でも、ブラウザ上では実質 JavaScript しか選べない。

ここに歪みが生じている。

歪んだまま、 Backbone.js が生まれた。

> この、CoffeeScript + Backbone.jsの組み合わせでコードを書くことで、実際に実務をこなすためにかかった時間を、かなり短縮できた

まさしくこういうことだと思う。ぼくの経験からも凄く同意できる意見だ。

CoffeeScript も、 Backbone.js も、発展途上だし必ずしも使い勝手の良いツールではないが、しかし、「ブラウザのクライアントサイドを」「破綻せずに」「なるべくメンテナンスできるように」作る需要は存在するし、実際ぼくやぼくのチームがどれだけ助けられたか知れないわけで。

あと、 node.js のことはよくわかんない。 Zappa.js みたいなのは凄いと思うけどオモチャっぽい。 node でもオブジェクト指向で書きたい際には有益かもしれないが、サーバサイドで OOP できる言語なんて他にも沢山ある(当方 Ruby 厨なのでみんな Ruby やりましょう)。まあ node のメリットを考えると CoffeeScript みたいなのを使ってでも使おう〜というのはあるのかな〜。

ということで、

http://subtech.g.hatena.ne.jp/secondlife/20120403/1333409654

大人の方がまとめていらっしゃるのでこちらの結論を読みましょう。ぼくは CoffeeScript 便利だなって素直に思うし、明日以降も CoffeeScript を書くと思います。書かないと終わんねーよ!