LoginSignup
1
0

More than 5 years have passed since last update.

Rubyのインスタンス変数 僕の勘違い3

Last updated at Posted at 2018-09-02

Rubyのインスタンス変数、学び始めたばかりの頃は全然わかっていなかった。
その勘違いをサンプルコードとともにまとめてみた。

【勘違い】 インスタンス変数を参照、変更するメソッドは変数名と同じでなければならない。

以下の2つのコードは同じことである。

サンプル1
class Engineer
  attr_accessor :name

  def initialize(name)
    @name = name
  end
end
サンプル2
class Engineer
  def initialize(name)
    @name = name
  end

  def name
    @name
  end

  def name=(name)
    @name = name
  end
end

出力した例

engineer = Engineer.new('aoki')
engineer.name
engineer.name = 'daisuke'
engineer.name
"aoki"
"daisuke"

今回の例で言えば、attr_accessorに:nameと書くだけでnameメソッドとname=メソッドを定義したことになると言うだけで、@nameを参照、変更するのに別のメソッドがあってもいい

class Engineer
  def initialize(name)
    @name = name
  end

  def put_name
    @name
  end

  def change_name(new_name)
    @name = new_name
  end
end

engineer = Engineer.new('aoki')
p engineer.put_name
engineer.change_name('daisuke')
p engineer.put_name

実行結果

"aoki"
"daisuke"

結論

今回の例で言えば、@nameと言うインスタンス変数に対して、@を取っ払ったnameengineer.nameとインスタンス変数の値を出力しているが、このnameはあくまでもメソッド名なので、インスタンス変数と同じ名前でなくてもよい。

1
0
2

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
1
0