内容
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 の合計を計算します。