libro
www.tuyano.com
初心者のためのRubyプログラミング入門

オブジェクトを更に極める! (5/5)

作成:2012-08-25 20:37
更新:2012-08-25 20:37

■継承しなくともクラスは拡張できる?

継承を使えば、クラスを拡張してもっと強力にできることはわかりました。ただ、継承というのは「拡張した新しいクラスを作る」というものであって、あるクラスそのものを拡張するわけではありません。が、既にあるクラスをあちこちで使っていると、「継承して作った新しいクラスを使うようにすべて修正する」というのはかなり大変です。それに、例えば整数とかテキストとかいった基本的な値を拡張したい、というような場合、継承はあまり役に立ちそうにありません。

こうした場合に用いられるのが、「既にあるクラスを再定義して拡張する」という手法です。実は、Rubyでは、既に定義されているクラスを更にclassを使って定義することが可能なのです。新たにclassでクラス定義を用意すると、その中に用意されたメソッドやインスタンス変数などがそのクラスに追加されます(クラスが置き換わるわけではありません)。これを利用することで、Rubyに最初から用意されているクラスの機能を変更することなどもできるようになります。

では、実際にやってみましょう。ここではわかりやすい例として、Rubyに用意されているIntegerクラスを拡張してみることにします。

Rubyでは、整数の値は「Integer」というクラスとして用意されています。Rubyのスクリプトに書いている「123」などといった数字は、実はすべてIntegerクラスのインスタンスなのです。ということは、このIntegerクラスを拡張すれば、整数の機能を変更することができる、というわけですね。

下のリスト欄にサンプルを掲載しておきました。ここでは、「to_ks」というメソッドをIntegerに追加しています。これは、to_sの漢字版で、整数の値を全角漢数字にしたテキストを返すものです。といっても「百二十三」というように桁まで表示するのは面倒くさいので、単に「一二三」というように表示させるものを作ってあります。

ここでは、n = 12300というように数字を変数に収めてからn.to_ksを出力していますが、もちろん、12300.to_ksというように数字から直接メソッドを呼び出してもかまいません。これで、「一二三〇〇」というように漢数字が得られます。変数nの値を色々と変更して試してみて下さい。

このように、Rubyに最初から組み込まれているクラスも、プログラマが自分のプログラムの中で自由に拡張していくことができます。Rubyという言語が非常に柔軟性にとむものであることがよくわかるでしょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

class Integer
	def to_ks
		str = self.to_s
		kstr = ''
		kn = ['〇','一','二','三','四','五','六','七','八','九']
		for c in str.split(//)
			kstr += kn[c.to_i]
		end
		return kstr
	end
end

n = 12300
puts(n.to_s)
puts(n.to_ks)

※関連コンテンツ

「初心者のためのRubyプログラミング入門」に戻る