Ruby入門 - クラス

トップ > 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()を利用できる

Copyright(C) 2014 杜甫々
初版:2014年12月30日、最終更新:2014年12月30日
http://www.tohoho-web.com/ruby/class.html