
Clojure Essentials: 入門書では飽き足らない人へ
- 作者: gpsoft
- 出版社/メーカー: gpsoft
- 発売日: 2014/05/24
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
Rubyをずっと使ってきたけど、新しい力が欲しくて Clojure を勉強し始めた。Clojureについてざっくり知りたくて、いいドキュメントがないか探していたらたまたま Kindle で 300円で上記の本があったので読んでみた。内容は Clojure の機能をざっくり紹介していて、説明は少なめだったけどその分はやく読めたから良かった。 初めの方に「英語を読むのが面倒な人向け」と書いてあったけど、まさにそんな感じだった。 Clojure の guide にも一通り読んだけど、この本の方が詳しかったように思う。
驚いた点
def
は変数宣言なのでdef hoge 0
は ruby でいうところのhoge = 0
に相当する- 無名関数を定義するのが
fn
なので有名関数を定義するにはdef foo (fn [n] n)
のような感じになる。この辺は JavaScript 等と同じで、変数と関数を区別しない考え。省略記法としてdefn foo [n]
のようにもかける def
で定義したシンボルにメタデータを与えることができる。ex:(def ^{:doc "Num of items"} num-items 20)
みたいな感じ。- これにはいくつか予約語のようなものがあって、例えば、
:dynamic
はコンパイラに型のヒントを与えることができる。(戻り値の指定に使える?) :pre
、:post
で事前条件、事後条件を設定できる。つまり、契約による設計をシンタックスとしてサポートしている。
(def twice (fn [n] {:pre [(> n 0)] :post [(even? %) (>= % 2)] (* n 2)})) (twice -1) ;これは Assertion Error になる (twice 3) ;6 を返す
雑感
Ruby も Lisp の影響が強い言語だから Clojure にも近い部分が有るけど、 Clojure はより関数型言語であることや並列処理を意識していて、そういうのが Ruby より強いのは興味をそそった。 また、僕は文法がごちゃごちゃした言語は苦手だ。Lispは文法はすごく単純だ。しかも Clojure は他の Lisp に比べても簡素にかけるように工夫されている。そういうところが気に入った。
だいたい自分に合わない言語の場合、この手の本を最後まで読み終えることが出来ないから、最後までよんでも興味を失っていないということはそれなりにあっているのだと思う。
Clojure は Ruby と比較すると、まず並列処理に優れている。Ruby (cRuby) は GIL (Global Interpreter Lock) により基本的には1つのCPUしか使わないようになっているから、複数のCPUがある環境ではCPUのパワーを存分に発揮することは出来ないし、Rubyの文法は並列処理を意識したものではない。 Clojure も Ruby と同じく動的型付け言語だけど、 関数にメタデータを設定することで Ruby よりも入力値・出力値の安全性を上げられそうだと感じた。なにも Haskell のような型の考え方だけが正解ではないだろう。それに僕は未だに動的型付け言語の方が好きだ。確かに今まで幾度となくダックタイピングを悪用したひどいコードを見たことは有るけど、僕がそういうコードを書いたわけじゃないしね。 上記の2つは Ruby 3 で対応が宣言されていることでも有るから、 Clojure はほぼ Ruby 3 と考えてもいいんじゃなかろうか。これはもちろん暴論だけど、僕はそんなふうにとらえた。
次の本ももっているので読んで見るつもりだ。

Clojure for the Brave and True: Learn the Ultimate Language and Become a Better Programmer
- 作者: Daniel Higginbotham
- 出版社/メーカー: No Starch Press
- 発売日: 2015/10/15
- メディア: Kindle版
- この商品を含むブログを見る

- 作者: Stuart Halloway and Aaron Bedra,川合史朗
- 出版社/メーカー: オーム社
- 発売日: 2013/04/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (11件) を見る