ume

Ruby initializeメソッド

前書き

initializeメソッドを浅くしか理解していないので深掘りしてみます。

要は以下の2つのコード(initializeメソッドある、ない)の違いを明確に理解できるようになりたいです.
initializeメソッドあり

class Konan

  def initialize(name)
    @name = name  
  end

  def say_name
    puts @name
  end
end

konan = Konan.new("コナン")
konan.say_name
出力結果コナン

initializeメソッドなし

class Konan

  def say_name(name)
    puts "#{name}です"
  end

end


konan = Konan.new
konan.say_name("コナン")
出力結果 コナン

そもそもinitializeメソッドとは?

⇨オブジェクト初期化メソッド

初期化とは?
⇨2つの意味がある.
①状態をリセット(元の状態に戻す)する.
iphoneなどを売るときデータを工場出荷状態に戻すといった作業をすると思いますが。このように以前の状態に戻すことを「初期化」という.

②使用可能の状態にする(プログラミングではこっちの意味で初期化を使うことが多い) ⇨例変数の初期化.
↓のままでは変数は使えない

number 

変数の初期化(変数という箱の中に値をセットする)

number = 10

使い始める前の変数(値を入れる箱)に初期値(最初の値)を設定する行為を「変数の初期化」という=変数を使用可能になる。

↓の記事が分かりやすかったので参考にしてみてください。 wa3.i-3-i.info

つまりオブジェクトの初期化とは=オブジェクトを使用可能にすること.
例えば以下のコードはオブジェクトを初期化(使用)できていない状態です。

class Konan

 def say_name
   puts @name
 end

 def introduce
   puts "江戸川#{@name}、探偵さ"
 end

end
konan = Konan.new("コナン")
konan.say_name

say_nameメソッドを実行しようとしているのですがsay_nameメソッド内の@nameというインスタンス変数がクラス内にどこにも定義されていないことがわかります=インスタンス変数が初期化されていない(使用可能になっていない)。つまりkonan = Konan.new("コナン")でkonanというオブジェクトを作成していますがkonanオブジェクト内のメソッドが使用不可になっているということはkonanオブジェクトも初期化されていないことになります。

なのでkonanオブジェクトを初期化(使用可能)するためには@nameというインスタンス変数を定義する必要があります。

class Konan

def initialize(name)
  @name = name
 end

 def say_name
   puts @name
 end

 def introduce
   puts "江戸川#{@name}、探偵さ"
 end

end
konan = Konan.new("コナン")
konan.say_name

initializeメソッドは@nameというインスタンス変数を定義するため(初期化)のメソッドです。 これによりkonanオブジェクトが使用可能になります。=konanオブジェクトの初期化ができたことになります。