0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rubyでクラスの内部からインスタンス変数を呼び出す時は@をつけて呼び出した方が良いかも

Last updated at Posted at 2025-05-05

rubyではattr_readerをつけないでインスタンス変数にクラス内部からアクセスするとエラーになります

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

  def get_name
    name
  end
end

u = User.new('John')
puts u.get_name # undefined local variable or method `name' for an instance of User (NameError)

エラー文を見ると、インスタンス変数として解釈されてないようです

attr_readerをつける

attr_readerをつけると、インスタンス変数として解釈されて、値が返ってきます

class User
  attr_reader :name
  def initialize(name)
    @name = name
  end

  def get_name
    name
  end
end

u = User.new('John')
puts u.get_name # John
puts u.name # John # attr_reader宣言でゲッターが定義されているので、これでもインスタンス変数にアクセスできる

インスタンス変数をクラス内部から@で呼び出せば、attr_readerはなくて良い

インスタンス変数をクラス内部から@で呼び出せば、attr_readerはなくて値は返ってきます。

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

  def get_name
    @name
  end
end

u = User.new('John')
puts u.get_name # John

クラスの外から直接ゲッターメソッドで呼び出しもできないので、なるべくはこちらの方法で定義する方が、カプセル化ができ良いかもしれません

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?