メタプログラミングRuby
メタプログラミングRuby を読了した。いつ買ったんだろう。少なくとも1年以上前…。
難しかったけど、面白かった。よく使うものは理解しやすかったし、あまり使っていなかったのものは、ほーと思った。
付録がいい感じ。本書の内容をコンパクトにまとめてる。「付録A よく使うイディオム」ではメタプログラミングではないけど、Rubyっぽいイディオムが紹介されている。メタプログラミングに興味のないプログラマでも、Railsを使っていれば、自然に使っているものだと思う。
付録A よく使うイディオム
特に「付録C 魔術書」は、本書のテクニックが短いコードで紹介されていて、あとから読み返すのに便利だと思う。
付録C 魔術書
- C.1 魔術
- C1.1 配列引数
- C1.2 アラウンドエイリアス
- C1.3 ブランクスレート
- C1.4 クラス拡張
- C1.5 クラス拡張ミックスイン
- C1.6 クラスインスタンス変数
- C1.7 クラスマクロ
- C1.8 クリーンルーム
- C1.9 コードプロセッサ
- C1.10 コンテキスト探査機
- C1.11 遅延評価
- C1.12 動的ディスパッチ
- C1.13 動的メソッド
- C1.14 動的プロキシ
- C1.15 フラットスコープ
- C1.16 ゴーストメソッド
- C1.17 フックメソッド
- C1.18 カーネルメソッド
- C1.19 遅延インスタンス引数
- C1.20 ミミックメソッド
- C1.21 モンキーパッチ
- C1.22 名前付き引数
- C1.23 ネームスペース
- C1.24 nil ガード
- C1.25 オブジェクト拡張
- C1.26 オープンクラス
- C1.27 パターンディスパッチ
- C1.28 サンドボックス
- C1.29 スコープゲート
- C1.30 自己 yeild
- C1.31 共有スコープ
- C1.32 特異メソッド
- C1.33 コード文字列
- C1.34 Symbol の Proc 変換
名前を知らなかったけど、これまでも使っていたものがたくさんある。配列引数、クラス拡張ミックスイン、遅延評価、遅延インスタンス引数、ミミックメソッド、モンキーパッチ、ネームスペース、nilガード、特異メソッド、などなど。
こうやって振り返ってみると、JavaScriptでも使っている、使えるテクニックがいろいろあると思った。関数型言語的共通点があるからかな、たぶん。
「付録E から騒ぎ」ではNullオブジェクトを扱っているけど、こんな一文があって、最後に癒やされた。
初期化されていないオブジェクトの参照はオブジェクト指向プログラマの宿敵である(Java プログラマに、今まで見た NullPointerException の数を覚えているかときいてみよう!)。
Javaやってた人間からすると、Rubyのnilガード、ほんとうにすてき。
言語はやっぱり適材適所で、それぞれの言語の得意分野がある。僕はWebサービスをRubyで書いていて、本当に楽しくて幸せ。もっとよいコードを書けるようになりたい。