Rubyには「オープンクラス」という機能があり,使い方次第で強力な道具になります。今回はこのオープンクラスを解説します。オープンクラスを活用している「Ruby on Rails」のライブラリActiveSupportについても紹介します。

 オープンクラスについての説明に入る前に,Rubyにおける通常のクラス定義について,復習しておきましょう。クラスFooを定義するには以下のように書きます。

class Foo < Bar
 def plus2(arg1, arg2)
  return arg1 + arg2
 end
end

 この定義ではクラス名がFoo,FooのスーパークラスはBarになります。FooはBarクラスを継承しています。クラス文の内側にあるdefによってplus2メソッドが定義されます。FooクラスはスーパークラスであるBarクラスが備えているメソッドなどを受け継ぎますから,Fooクラスのオブジェクトは,Barクラスのメソッドに加えてplus2メソッドが使えるということになります。

 このように新しいクラスを定義できることに加え,Rubyでは既存のクラスに定義を追加できます。次のようにして,既に定義済みのFooクラスにメソッドを追加します。

class Foo
 def times2(arg1, arg2)
  return arg1 * arg2
 end
end

 Fooクラスは既に提供していたBarクラスから継承したメソッド,定義済みのplus2メソッドに加えて,新たに定義されたtimes2メソッドも使えるようになります。つまりFooクラスそのものを書き換えています。既に作られているFooクラスのオブジェクトにも機能追加の影響が及びます。

 このように後から機能を追加できるクラスのことを「オープンクラス」と呼びます。この例ではユーザーが定義したクラスFooに機能を追加しましたが, RubyではStringやArrayなどのような基本的なデータ型に至るまでオープンクラスとなっていて,自由に機能を追加できます。

 オープンクラスの提供する柔軟性や拡張性はほかのプログラミング言語でも注目されています。例えばC#は「partial class」というオープンクラスに似た仕組みを備えています。

この先は会員の登録が必要です。今なら有料会員(月額プラン)が12月末まで無料!

日経 xTECHには有料記事(有料会員向けまたは定期購読者向け)、無料記事(登録会員向け)、フリー記事(誰でも閲覧可能)があります。有料記事でも、登録会員向け配信期間は登録会員への登録が必要な場合があります。有料会員と登録会員に関するFAQはこちら