内容
Rubyにおけるクラス定義はオブジェクト指向プログラミングの核心部分です。この記事では、基本的なクラス定義から継承、クラス式の評価順序に至るまでを掘り下げていきます。
基本のクラス型
class Foo
def initialize(a)
@a = a
end
def method1
@a
end
end
foo1 = Foo.new(1)
foo2 = Foo.new(2)
p foo1.method1 # 出力: 1
p foo2.method1 # 出力: 2
initialize
メソッドではインスタンス変数 @a
に引数 a
を代入しており、method1
ではこのインスタンス変数を返すように定義されています。
クラスへの代入
a = Foo
b = a.new(1)
p b.method1 # 出力: 1
クラス自体もオブジェクトであり、変数に代入して操作することができます。
クラス式の評価順序
p 1 # 出力: 1
class Hoge
p 2 # 出力: 2
end
p 3 # 出力: 3
この例では、クラス定義の内外でのコードの実行順序を示しています。
インスタンスのクラスを調べる
p foo1.class # 出力: Foo
オブジェクトがどのクラスのインスタンスであるかを調べる方法です。
継承クラス
class FooExt < Foo
def initialize(a, b)
@b = b
super a
end
def method2(c)
@a + @b + c
end
end
fooExt = FooExt.new(3, 4)
p fooExt.method1 # 出力: 3
p fooExt.method2(5) # 出力: 12
FooExt
クラスは Foo
クラスを継承しており、initialize
メソッドでは super
を用いて親クラスのコンストラクタを呼び出しています。このクラスは、追加のインスタンス変数 @b
を導入し、新しいメソッド method2
を定義して、@a
、@b
、および追加の引数 c
の合計を計算します。