Effective Rubyを読んでいます(7)

tl;dr

「Effective Ruby」の項目31~32を読みました。

:arrow_down: 目次です。

  • 項目31 evalのさまざまなバリアントの間の違いを把握しよう
  • 項目32 モンキーパッチの代わりとなるものを検討しよう

知ったこと

モンキーパッチよりRefinementsを使おう(項目32)

モンキーパッチを使用する前に、その他の方法を検討した方が良いと記載されていました。その一案として、Refinementsが紹介されていました。 Refinementsとは、オープンクラスの影響範囲を制限する機能です。usingキーワードを使用すると、ファイルの末尾までが影響範囲となります。

この機能を使ったことがなかったため、実際に使用してみたいと思います。

:arrow_down: Refinementsを使用してArrayクラスにsumメソッドを追加します。

module ArrayExt
  refine Array do
    def sum
      inject(:+)
    end
  end
end

using ArrayExt

puts [1, 2, 3].sum # => 6

以上です。

感想

項目32に、次の文章がありました。良い言葉だと思いました :hatching_chick:

ソフトウェア開発では、仕事をしてくれるテクニックのなかでもっとも簡単なものを使うようにすべきだ。