LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-09-02

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

【勘違い】 インスタンス変数を参照、変更するにはクラス内部からでもattr-accessorに書かないといけない

class Engineer
  attr_accessor :name, :age

  def initialize(name, age)
    @name = name
    @age = age
  end
end

engineer = Engineer.new('aoki', 34)
p engineer.age
engineer.weight = 35
p engineer.age

実行結果

34
35

ただし、同一クラスの(この場合はEngineerクラスの)インスタンスメソッド内でインスタンス変数の値を使うなら、attr_accessorに記述しなくていい

class Engineer
  attr_accessor :name
  def initialize(name, age)
    @name = name
    @age = age
  end

  def instroduce_myself
    "私は#{@name}です。#{@age}歳です"
  end
end

engineer = Engineer.new('aoki', 34)
p engineer.instroduce_myself

実行結果

"私はaokiです。34歳です"

そもそも、instroduce_myselfメソッドに限って言えば、attr_accessorに:nameも不要

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

  def instroduce_myself
    "私は#{@name}です。#{@age}歳です"
  end
end

engineer = Engineer.new('aoki', 34)
p engineer.instroduce_myself

結論

クラスの外部から使うのでなければ、attr_accessorに定義しなくてもいい。

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