一番大事な、クラスとインスタンスについて、イメージで掴む部分は割愛(笑)
# クラス定義 先頭文字は、ローマ字大文字で
class Aaa
###
end
# インスタンス生成 new
bbb = Aaa.new
# メソッドnewは定義せずとも全てのクラスに実装されている
# インスタンスメソッド
# class定義の中に通常通りメソッド定義する
# インスタンス毎の個別の情報を使った処理に使用する
# インスタンスに.をつけて呼び出す
class Aaa
def bbb
###
end
end
ccc = Aaa.new
ccc.bbb
# インスタンス変数
# インスタンスメソッド中に、@をつけて定義する
class Aaa
def bbb
@ddd = 1
end
end
# クラスメソッド
# class定義の中に、メソッド名の前にself.をつけてメソッド定義する。
# クラスで共通の情報を使った処理に使用する
# インスタンス定義時に呼んでいるnewがクラスメソッドにあたる
# クラス名に.をつけて呼び出す
class Aaa
def self.eee
###
end
end
ccc = Aaa.eee
# クラスインスタンス変数
# クラスの中で且つメソッドの外で定義。変数名に@をつける
class Aaa
@ddd = "クラスインスタンス変数"
def bbb
###
end
end
# クラス変数
# クラスの中で、変数名に@@をつけて定義
# クラスを通して、値が共通となる情報に使用
class Aaa
@@ddd = "クラス変数"
end
メソッドの比較
クラスメソッド | インスタンスメソッド |
---|---|
メソッド名の前にselfをつける | selfをつけない |
インスタンス共通処理 | インスタンス個別処理 |
クラスから呼出 | インスタンスから呼出 |
変数スコープ
範囲 | クラス変数 | インスタンス変数 | クラスインスタンス変数 |
---|---|---|---|
クラスメソッド内 | ○ | × | ○ |
インスタンスメソッド内 | ○ | ○ | × |
定義したクラス内 | ○ | × | ○ |
継承したクラス内 | ○ | ○ | × |
# インスタンス生成時に無条件で実行されるメソッド initializeメソッド
# 何か処理を行いたい場合に定義すればいいが、newと同様に何もしないメソッドとして既に定義されているらしい。自分で定義した場合は既にある定義を上書きするようなことになるのかな???
class Aaa
def initialize
###
end
end
# クラスの継承
# クラスメソッド、インスタンスメソッドを継承する
# 変数も継承するっぽいが、深い話になるっぽいので今は深掘りしないでおこう。
class Aaa < Bbb
###
end