【Ruby】クラスについて

クラス

クラスを定義したい時は、class を使います。
クラス名は英大文字で始まります。

文法

class クラス名
end
rescue/ensure 節を指定し、例外処理ができます。

class MyClass
end

オブジェクトの生成

new 演算子でオブジェクトを生成します。

obj = MyClass.new

クラスメソッド

クラスオブジェクトから実行できるメソッドです。

class クラス名
def self.メソッド名(引数1, 引数2, …)
処理
end
end

※self はクラス名でも可

class Hoge
  def self.hoge
    puts "hoge"
  end
end

クラス変数

変数名の前に「@@」をつけて定義する。
そのクラスの全てのインスタンスで共有される変数。
クラスメソッド、インスタンスメソッド、クラス定義式内でアクセスできます。

インスタンスメソッド

インスタンスオブジェクトから実行できるメソッドです。

class クラス名
def メソッド名(引数1, 引数2, …)
処理
end
end

class Hoge
  def hoge
    puts "hoge"
  end
end

インスタンス変数

変数名の前に「@」をつけて定義する。
インスタンスごとに独立して持つ変数。
インスタンス変数にアクセスできるのは、initializeメソッドとオブジェクトのインスタンスメソッドだけ

class クラス名
def メソッド名
@name = 値
end
end

initializeメソッド

オブジェクトの初期化のためのメソッドです。
クラス内に記述した場合にはオブジェクトが作成される時に自動的に呼び出されます。

class クラス名
def initialize()
処理
end
end
※Javaなどで言う所のコンストラクタみたいなものですかね。

アクセスメソッド

クラスの中で使われているインスタンス変数は、
参照したり変更したい場合は、インスタンスメソッドを経由して行う必要があります。
しかし、多くのインスタンス変数がある場合はメソッドの管理などが面倒です。
そこで参照や更新が簡易的に行えるアクセスメソッドと呼ばれるものが用意されています。

用意されているアクセスメソッドは次の3つです。

定義式機能
attr_reader :変数名参照が可能
attr_writer :変数名更新が可能
attr_accessor :変数名参照と更新が可能

使い方は次のようになります。

class Human
  def initialize(name="未定義")
    @name = name
  end
  
  attr_accessor :name
end

上記のように対象となるインスタンス変数名に対して、
「attr_reader」「attr_writer」「attr_accessor」のいずれかを使って、
上記のように記述することで、参照や更新用のメソッドを個別に定義する代わりとなります。

継承

クラスを継承したい時は、< を使います。

class MyClass
end

class MySuperClass < MyClass
end

スーパークラスを省略した場合は、Object クラスのサブクラスとして作成されます。

クラスのネスト

クラスをネスト(入れ子)にすることができます。
外側クラスと内側クラスに継承関係はありません。

class AAA
class BBB
end
end

obj = AAA::BBB.new

クラスの拡張

すでに作成済みのクラスに対して、メソッドや変数などを追加(上書き)することができます。

class MyClass # クラスを定義
def name
puts "Yamada"
end
end

class MyClass # 同盟のクラスを定義
def name # 既存のメソッドを上書き
puts "Yamada Taro"
end
def city # 既存クラスにメソッドを追加
puts "Tokyo"
end
end

特異クラス

特定のオブジェクトにメソッドやインスタンス変数を 定義/追加します。
この構文の内部で定義したメソッドや定数は指定したオブジェクトに対してだけ有効になります。

文法
class << expr
式..
end
rescue/ensure 節を指定し、例外処理ができます。

obj = Object.new # obj = nil でも可
class << obj
  def test
     :
  end
     :
end

特異メソッド

Rubyでは、特定のオブジェクトにのみ有効なオブジェクト固有のメソッドを定義できます。

文法
def {オブジェクト}.{メソッド名}~end
{オブジェクト}を省略した場合は、「self」に対するメソッド定義となります。

モジュール

モジュール名はアルファベットの大文字で始めます。
モジュールではオブジェクトを作成することは出来ません。
モジュールの利用方法としては、
「モジュール名.メソッド名」の形式で関数のように実行するか、
または他のクラスの中にインクルードして利用することが出来ます。

文法
module モジュール名
式..
end
rescue/ensure 節を指定し、例外処理ができます。

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

Ruby2入門

Posted by 管理人