毎月恒例のYokohamarbです。
今月は、
の2本立て。
そして、恒例のスイーツタイムもありました。
Rubyレシピブックの読書会
毎月恒例のRubyレシピブックの読書会です。
- 作者: 青木峰郎,後藤裕蔵,高橋征義,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2010/08/28
- メディア: 単行本
- 購入: 5人 クリック: 83回
- この商品を含むブログ (31件) を見る
今回は、「015 特異メソッド」から。Rubyがもつ大きな特徴の一つで、特定のオブジェクトに対して動的にメソッドを追加できます。例えば、
s = "hoge" def s.my_upper self.upcase + "!" end s.my_upper # => "HOGE!"
というふうにStringのインスタンスsに対してだけメソッドを定義できるといった感じ。
読書会では、Rubyレシピブックではあっさりと書かれていた特異メソッドや特異クラスについて使い道についての議論に。
例としては、ActiveSupportのcore_ext以下にあるソースを見れば・・・という意見や、メタプログラミングRubyを読んでみればという話が出ました。
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (112件) を見る
メタプログラミングRubyは、139ページから始まる「第4章 木曜日:クラス定義」の所に特異メソッド・特異クラスの例があるので、参考になるかと思います。
今日のレシピブック読書会はサクサクと進みました。
その後の例外処理については、複数個rescueが並んだときの処理について、例外の継承ツリーを意識しないとハマるということが話題となりました。
例えば、メソッドの中でRuntimeError例外を飛ばしたとき、rescueをRuntimeError -> StandardErrorの順に書くと
def hoge raise RuntimeError rescue RuntimeError puts "runtime" rescue StandardError puts "standard" end hoge # => "runtime"
なんですけど、StandardError -> RuntimeErrrorの順で書くと、
def hoge raise RuntimeError rescue StandardError puts "standard" rescue RuntimeError puts "runtime" end hoge # => "standard"
となってしまう。Javaでも同じ仕様だけど、はまりどころなので要注意。
後は、Rubyのはまりどころがポロポロ出てきて、
- aliasの引数の順(別名が一番目、二番目が元の名前)
- aliasは予約後なので、引数の間にカンマは要らない。alias_methodは引数の間にカンマがいる。
- remove_methodとundefの違い
など。色々深い話ができました。
コードレビュー
その後は、@dan5yaさんが最近書かれたRailsアプリのレビューについて。
人からレビューを受けるっていうのはいろんな人からの叡智を得ることができるので、良い習慣ですよね。
レビューの際には、決して書いた人を否定するのではなく、コードをレベルアップさせるためには何をすればよいかという観点でみて、受ける側も素直に指摘を受けるのが良いかと思います。
僕の場合、つい「いや、ここはちょっとカクカクジカジカの理由で・・・」と言い訳をして不機嫌になってしまうので、まだまだだよなぁ。人間できてません。^^;
Twitterまとめ
いつものようにTogetterです。