«前の日記(2010-11-23) 最新 次の日記(2010-11-28)» 編集

いがいが日記


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


«前の日記(2010-11-23) 最新 次の日記(2010-11-28)» 編集