Ruby入門 - クラス
クラス(class)
class class_name [ < super_class ] expression... [rescue [error_type, ...] [=> evar] [then] expression...]... [else expression...]... [ensure expression...] end
class はクラス を定義します。クラス名は英大文字で始まります。下記の例は MyClass クラスを定義しています。MyClass クラスはインスタンス変数 @name を持ちます。また、メソッドとして @name に値を設定する setName() と、@name の値を参照する getName() を持ちます。
class MyClass
@name = ""
def setName(str)
@name = str
end
def getName
return @name
end
end
オブジェクトの生成(new)
new 演算子でオブジェクトを生成し、setName() メソッドを呼び出して名前を設定し、getName() メソッドでその値を参照しています。
obj = MyClass.new
obj.setName("Tanaka")
puts obj.getName
継承(<)
< はクラスを継承する際の親クラス(スーパークラス)を指定します。下記の例で、MyMember2クラスは、MyMemberクラスを継承するサブクラスとして定義されています。MyMember2クラスは、MyMemberクラスが持つ $nameプロパティ、setName()メソッド、getName()メソッドを引き継ぎ、加えて、$addrプロパティ、setAddr()メソッド、getAddr()メソッドを持ちます。
class MyMember
@name = ""
def setName(str)
@name = str
end
def getName
return @name
end
end
class MyMember2 < MyMember
@addr = ""
def setAddr(str)
@addr = str
end
def getAddr
return @addr
end
end
obj = MyMember2.new
obj.setName("Tanaka")
obj.setAddr("Tokyo")
puts obj.getName
puts obj.getAddr
スーパークラスを省略した場合は、Object クラスのサブクラスとして作成されます。
class MyClass # class MyClass < Object と同義 end
クラスのネスト
クラスをネスト(入れ子)にすることができます。外側クラスと内側クラスに継承関係はありませんが、いくつかのクラスをグルーピングする際に役立ちます。
class Foo class Bar end end obj = Foo::Bar.new
クラスの拡張
下記の様にして、すでに作成済みのクラスに対して、メソッドや変数などを追加(上書き)することができます。
class MyClass # クラスを定義
def hello
puts "Hello!"
end
end
class MyClass # 同盟のクラスを定義
def hello # 既存のメソッドを上書き
puts "HELLO!!!"
end
def bye # 既存クラスにメソッドを追加
puts "Bye!"
end
end
特異クラス(<<)
class << instance expression... [rescue [error_type, ...] [=> evar] [then] expression...]... [else expression...]... [ensure expression...] end
<< を用いて、すでに作成済みのオブジェクトに対して、一時的に新たなメソッド等を追加定義することができます。下記の例では、Fooクラスのオブジェクト obj に対して新たなメソッド hello を追加定義しています。
class Foo
end
obj = Foo.new
class << obj
def hello
puts "Hello!"
end
end
obj.hello
モジュール(module)
module module_name expression... [rescue [error_type, ...] [=> evar] [then] expression...]... [else expression...]... [ensure expression...] end
module はモジュールを定義します。モジュールはクラスと似ていますが、それ自体ではインスタンスを生成せず、インスタンス変数も持ちません。代わりに、他のクラスにインクルード(include)されて使用されます。これにより、様々なクラスにモジュールの機能を取り込むことができます。
module Foo # Fooモジュールを定義
def add(x, y)
return x + y
end
end
class Bar
include Foo # Fooモジュールを取り込む
end
obj = Bar.new # Barのインスタンスであっても
puts obj.add(3, 5) # Fooモジュールのメソッドadd()を利用できる