読者です 読者をやめる 読者になる 読者になる

第16回 Yokohamarbに行ってきました

Ruby

毎月恒例のYokohamarbです。


今月は、

  • Rubyレシピブックの読書会
  • danさんが最近書かれたRailsのコードをみんなでレビューする

の2本立て。

そして、恒例のスイーツタイムもありました。

Rubyレシピブックの読書会

毎月恒例のRubyレシピブックの読書会です。

Rubyレシピブック 第3版 303の技

Rubyレシピブック 第3版 303の技

今回は、「015 特異メソッド」から。Rubyがもつ大きな特徴の一つで、特定のオブジェクトに対して動的にメソッドを追加できます。例えば、

s = "hoge"
def s.my_upper
  self.upcase + "!"
end

s.my_upper  # => "HOGE!"

というふうにStringのインスタンスsに対してだけメソッドを定義できるといった感じ。

読書会では、Rubyレシピブックではあっさりと書かれていた特異メソッドや特異クラスについて使い道についての議論に。

例としては、ActiveSupportのcore_ext以下にあるソースを見れば・・・という意見や、メタプログラミングRubyを読んでみればという話が出ました。

メタプログラミングRuby

メタプログラミングRuby

メタプログラミング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の違い

など。色々深い話ができました。

スイーツタイム

Σ(´∀`||;)ドキッ!! 男だらけのyokohama.rbなのにスイーツタイムが今回もありました。



コードレビュー

その後は、@dan5yaさんが最近書かれたRailsアプリのレビューについて。

人からレビューを受けるっていうのはいろんな人からの叡智を得ることができるので、良い習慣ですよね。

レビューの際には、決して書いた人を否定するのではなく、コードをレベルアップさせるためには何をすればよいかという観点でみて、受ける側も素直に指摘を受けるのが良いかと思います。

僕の場合、つい「いや、ここはちょっとカクカクジカジカの理由で・・・」と言い訳をして不機嫌になってしまうので、まだまだだよなぁ。人間できてません。^^;

Twitterまとめ

いつものようにTogetterです。