注目の書籍

好評発売中!

まつもとゆきひろコードの未来

Rubyの開発者・まつも とゆきひろ氏がクラウ ド時代の技術を鋭く分 析、やさしく解説!

オープンソース/Linux

まつもと直伝 プログラミングのオキテ

日経Linux

まつもと直伝 プログラミングのオキテ 第21回 オープンクラスとRuby on Rails

2008/06/23
ネットワーク応用通信研究所 まつもと ゆきひろ
出典:日経Linux 2007年1月号  149ページより
(記事は執筆時の情報に基づいており、現在では異なる場合があります)

 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」というオープンクラスに似た仕組みを備えています。

>>オープンクラスを生かす専用機能
次ページ以降はITpro会員(無料)の方のみお読みいただけます。
会員の方は、 ログインしてご覧ください。
まだ会員でない方は、ぜひ登録(無料)していただき、ITproの豊富なコンテンツをご覧ください。

この記事に対するfacebookコメント

nikkeibpITpro

読みましたか? 〜 未読記事をご紹介