2012年8月26日日曜日

ClojureScript

最近はClojureScriptばかり書いてます。
Clojureを書いてるとJavaを意識しなければいけないことがありますが、ClojureScriptも同じでJavaScriptを意識しなければなりません。
とはいってもJavaScriptを書くよりも遥かに快適なので是非広まって欲しいものです。

今日までにClojureScriptを書いてきて、わかったことを少しまとめようと思います。

clojure.browser


Google Closure Libraryのラッパーで、domやevent、netなどのライブラリがあります。
domとeventを触りましたが、ものすごく中途半端です。
結局goog.domやgoog.eventの関数が必要になるので、 まだまだ発展途上と言えるでしょう。

Closure Libraryの関数はJavaScriptのArrayやObjectを扱うものが多く、ClojureScriptのデータ型を渡すときに少々不便だったりします。
clojure.browserはそういった不満を解消するものとなってほしいです。


ちょっと便利な関数
  • clojure.browser.dom/ensure-element
    • keywordを渡すとgetElementとして、 stringを渡すとhtmlToDocumentFragmentとして動きます
  • clojure.browser.dom/log
    • Console#logです
    • *print-fn*にset!するのが一般的?

ClojureとJavaScript


JavaScriptの世界で生きていくためにはClojureの標準ライブラリの関数だけでは生きていけません。
なので、ClojureScriptにはClojureとJavaScriptの間を取り持つ関数が存在します。
しかし、ドキュメントが少なすぎて存在があまり知られていないように感じます。かなしい。

js-objとarrayは特に重要です。
それぞれObjectとArrayを生成する関数です。
主にClosure Libraryの関数を呼び出す為に使います。
js-keysやjs-deleteなんかも覚えておきましょう。

JavaScriptを直接実行するjs*なんかもありますが、最終手段とするべきでしょう。

array-seqも便利です。
JavaScriptのArray的データ型(NodeList, FileListなど)をClojureScriptのデータ型に変換するものです。
(extend-type Hoge ISeqable (-seq [hoge] (array-seq hoge)))
としておくとClojureScriptのコレクション関連の関数が使えて便利になります。

外部ライブラリ


ちゃんとClojureScriptのライブラリだって存在します。
  • core.match
    • パターンマッチを提供してくれるライブラリ、便利。
  • core.logic
    • JavaScriptで論理プログラミングが出来るよ!やったね!
    • しかしバグあるしあまり期待しないほうがいい。

読まなければいけないもの



ClojureScriptやりましょうず!

0 件のコメント:

コメントを投稿