Osaki.jsでの裏目標としては、エンジニアに積極的にアウトプットしてもらうことなんですが、言い出しっぺがアウトプット出さなきゃ話にならないので、ブログも積極的に書くし、積極的に出ていっていろいろ発表してこようという第一弾。ということで、enchant.js meetup 東京 vol.2 でLTしてきました。
感想としては「プレゼンは面白かったけれども内容はさっぱりわからんかったw」という評価をいただきました。
うん、俺が聞いててもこれじゃわからんわw
ということで解説します。
ポイントは2つ
- CoffeeScript はシンプルにかけていい言語
- クロージャをかけるとJavaScriptの表現力が格段に上がる
CoffeeScript はシンプルにかけて良い言語
CoffeeScriptについて批判的な記事を最近多く見ますが、その批判的な記事に言っていることはある側面では正鵠を射ています。そういう批判的な記事で上げられているシチュエーションでは確かにCoffeeScriptは使いづらいかもしれません。
しかし、特定の用途では非常に使いやすく、シンプルな記述ができるパワフルな言語です。
特定の用途というのは、たとえばnode.jsアプリケーションや、DOM操作を伴わないアプリケーションを書くときだと考えています。
CoffeeScriptは非常に小さな仕様の言語なので、JavaScriptを知っている人であれば半日もかからずにマスターできます。既存のJavaScriptのコードをCoffeeScriptに手動で翻訳すれば大丈夫。僕はnode.jsのExpressが吐き出すapp.jsをapp.coffeeに翻訳するっていう練習で覚えました。3時間くらいだったかな?
また、JavaScriptの初学者はJavaScriptではなくてCoffeeScriptを学ぶのがいいと思います。なぜかというと、JavaScript特有のバッドノウハウを覚える必要無いからです。この利点はすべての欠点に勝るとおもいます。(ただし、他の言語を学んだことがある人じゃないとつまずく可能性がありますが)
クロージャ
クロージャという機能は、よく名前は聞くのですがよくわからない機能の一つだと思います。
実はそんなに難しくは無いのだけれども、そのよくわからない原因はwikipediaの記述だと思います。ググレカスの功罪は、知識がない人には正しい or わかりやすい情報にたどり着くのが難しい場合があるということです。
僕もしばらくわからなかったのですが、スライド中でも取り上げている記事を読んで立ちどころに理解することができました。
[JavaScript] 猿でもわかるクロージャ超入門 まとめ - DQNEO起業日記
クロージャって名前の意味がよくわからないだけで、実はシンプルな話なんですね。
関数を返す関数。関数を返す関数の実行。メソッド中の変数がstatic変数のように振る舞う。
この3つがわかると、JavaScriptでの表現力が激烈に上がります。
例のN連射弾でのクロージャ
さて、じゃぁ、スライド中ででてきたN連射弾をクロージャを使わないで実装する場合を考えてみてください。
クロージャ内でstaticに保持する変数(N連射弾の例だと、弾の数nとかintervalとか)をどうやって保持するか。
そもそも全体の設計から考えると、弾というクラスを作って、弾クラスではその弾の設定や挙動を定義しようとするのが自然なオブジェクト嗜好の考え方じゃないでしょうか。
じゃぁ、N連射は? N連射クラスをつくる?
でも、N連射クラスの中から弾を生成する?
N連射をN連発するときはどうする?
振る舞いを記述するためだけにオブジェクトにするのはすごく冗長な感じがします。
クラスを作らない場合はどうするか。
N連射弾を管理するための、グローバルな配列を複数管理して、何発目と飛ばしているのか、前の弾を発射してから何フレームたっているのかなどを管理しなくてはいけません。N連射弾を1発うつたびに管理用配列に情報をいれて、毎フレームチェックして回ります。
うわー、だりー。なにやってるかわかんねー。
N連射弾にバリエーション(N連射N分裂とか)が増えた時どうすんだ?
という、そこでクロージャです。
新たに管理用クラスを作る必要もなく、管理用のグローバルな変数を用意する必要もない。やることは、ただ毎フレームクロージャを呼んであげるだけでOK!
実際にクロージャを使わないで、N連射N連をを書いてみるとその煩雑さにハゲ散らかります。
というわけで
きもちよくクロージャが書けたので自慢したかったのさヽ(´ー`)ノ