DesignAssembler

備忘録に近い

Rubyのオープンクラス

オープンクラス

Rubyには定義済みクラスに新しくメソッドを追加する機能があります。これをオープンクラスと言います。

継承やミックスインをせずにクラスを拡張できます。

また、既存のメソッドを上書きすることをモンキーパッチと言います。

class Fixnum
  def increment
    self + 1
  end
end

> num = 1234
 => 1234
> num.increment
 => 1235

上のコードではFixnumクラスに新しくincrementというメソッドを追加しました。 下のコードを見てください。

class Fixnum
  def to_s
    self + 1
  end
end

> num = 1234
 => 1234
> num.to_s
 => 1235

Fixnumクラスのto_sを上書きして、1を足すコードにしました。これはこの変更を常に意識していないと開発に差し障るでしょう。

オープンクラスは便利だが多用は禁物ですね。

なお、Railsオープンクラスを使うときはconfig/initializersに拡張したコードを置きます。

gemを自分で拡張したいときに使われます。

参考

www.atmarkit.co.jp

tbpgr.hatenablog.com