Rubyの言語について掘り下げたいときによく話に出てくる「メタプログラミングRuby」の第二版を読んだ。
構成
ストーリー仕立てで一つのプログラムに対してメタプログラミングのアプローチを行う1部とRailsのActiveRecordについて深掘りしていく2部の2部構成になっている。
どのくらいかかった?
社の @ryuchan_00さんと二人で読書会を開き、本編を音読しながらクイズなどのコードを書いていたら全部で22時間で読み切ったという記録が残った。
面白かったところ
privateの仕様
- self以外のオブジェクトのメソッドを呼び出すには、レシーバを明示的に指定する必要がある。
- privateのついたメソッドを呼び出すときはレシーバを指定できない。 Rubyにおけるprivate methodはこの2つのルールを利用して制御されていることについて、シンプルできれいだなと感心した。
一歩右、それから上へ
メソッド探索の方法。書籍の序盤で叩き込まえて、忘れた頃に特異クラスの話で再開して感動した。
Procとlambdaの仕様の違い
- Procの中で
return
を使ったときにはProcを呼んでいるメソッドを抜ける - lambdaの中で
return
を使ったときにはlambdaを抜ける
スコープをまたぐ場合、またがない場合
def
,Class
,Module
キーワードはブロックを作り、その内部はスコープが変わる。- 同じスコープ内で、メソッド定義やクラス、モジュールの定義を行いたい場合は、
define_method
,Class.new
,Module.new
で実現ができる。
ActiveRecordの移り変わり
ActiveRecordが最初にできてから、実装が変化し、ActiveModelが分離し…といった歴史が語られていて良い。
総じて
読み進めていくごとにRubyの仕組みの奥底を覗いていくような間隔になってとても楽しく読めた。これらを使いこなせるようになるのはまだまだ先だと思うけど、内部を想像しながらコードを読めるようになっただけでも進歩だと思う。