2010-11-27 [長年日記]
_ [book] メタプログラミングRuby
RubyConfの往復の飛行機で読み切りました。
これはめちゃめちゃ面白いです。
Rubyのコードを見る目、特にブロックが変わりました。
Ruby初級者が中・上級者へステップするのにオススメの1冊です。
内容はメタプログラミングをするためのtipsを紹介して進みます。
tipsにそれぞれ名前がついているのが覚えやすくていいです。
メタプログラミングの定義は最後までふわっとしているのですが、
コードを生成するコードを書くプログラミングとか、
DSLを作るためのプログラミングとか、
そんな心構えで読んでいけば十分だと思います。
その過程でRubyの言語仕様の解説がたくさん書いてあって、
クラス、メソッド、ブロックのローカル変数のスコープの話、
「インスタンス変数はオブジェクトに住んでいる。メソッドはクラスに住んでいる。」などの
継承チェーンの話、特異クラスの話などなど盛りだくさん。
私は今までなんとなくで書いていたRubyのコードが、
ちゃんと系統だって仕様が分かるようになりました。
特にブロックがクロージャだということが今まで言葉では聞いていても、
全然理解ができなかったものが分かった気になれました。
こんな言語仕様を考えたmatzさんスゲー!と飛行機内で感動。
そして読んでもよく分からなかった2点をRubyConfでmatzさんに質問してみました。
(日本人特権ですね!)
Q.ブロックっぽく見える構文(if 〜 end とか)とブロックを見分ける方法は?
A.do か { があればブロック
# わかりやすい!
Q. if condition foo=true end; p foo
でconditionが成立しなくても foo は存在してnilだけど、どう考えればいいの?
A.コンパイル(文法パース)時に foo が存在することが分かるから、
オブジェクトが生成される。だけど書き込みはされないので、デフォルトのnil値になってる。
# なるほど!
ということでオススメの一冊。
Ruby黄金聖闘士試験対策にもなります。
翻訳は信頼と実績の角さんなのでとても読みやすいです。しかもコネタが挟んであったりして面白い。
著者のPaoloさんはRubyKaigiで来日した際にサイン会でみんなに
丁寧にサインして会話してくれたのが印象に残っています。
良い本をありがとうございました。
9784048687157