0
0

More than 3 years have passed since last update.

Rubyのクラスとインスタンス

Last updated at Posted at 2019-11-13

一番大事な、クラスとインスタンスについて、イメージで掴む部分は割愛(笑)

 # クラス定義 先頭文字は、ローマ字大文字で
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0