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?

インスタンス変数の参照

Last updated at Posted at 2024-11-12

インスタンス変数とは?

クラス内部ではインスタンス変数を使うことができます。インスタンス変数は同じインスタンス(同じオブジェクト)内部で共有される変数です。インスタンス変数の変数名は必ず@で始めます。

ローカル変数

ローカル変数はアルファベットの小文字、またはアンダースコアで始めます

ローカル変数に代入されていないとエラーになる

irb(main):189* class User4
irb(main):190*
irb(main):191*   def initialize(name)
irb(main):192*     @name = name
irb(main):193*   end
irb(main):194*
irb(main):195*   def hello
irb(main):196*     # shuffled_name = @name.chars.shuffle.join
irb(main):197*     "Hello, I am #{shuffled_name}."
irb(main):198*   end
irb(main):199> end
=> :hello
irb(main):200> user = User.new('Alice')
(irb):54:in `initialize': wrong number of arguments (given 1, expected 3) (ArgumentError)
...
irb(main):201> user = User4.new('Alice')
=> #<User4:0x000000010ae9d710 @name="Alice">
irb(main):202> user.hello
(irb):197:in `hello': undefined local variable or method `shuffled_name' for #<User4:0x000000010ae9d710 @name="Alice"> (NameError)

    "Hello, I am #{shuffled_name}."
                   ^^^^^^^^^^^^^

インスタンス変数が代入されなくてもエラーにならない

irb(main):217* class User6
irb(main):218*
irb(main):219*   def initialize(name)
irb(main):220*     # @name = name
irb(main):221*   end
irb(main):222*
irb(main):223*   def hello
irb(main):224*     # shuffled_name = @name.chars.shuffle.join
irb(main):225*     "Hello, I am #{@name}."
irb(main):226*   end
irb(main):227> end
=> :hello
irb(main):228> user = User6.new("Alice")
=> #<User6:0x000000010755cdc0>
irb(main):229> user.hello
=> "Hello, I am ."

クラス外からのインスタンス変数の参照、書き換え

irb(main):275* class User7
irb(main):276*   def initialize(name)
irb(main):277*     @name = name
irb(main):278*   end
irb(main):279*
irb(main):280*   def name
irb(main):281*     @name
irb(main):282*   end
irb(main):283*
irb(main):284*   def name=(value)
irb(main):285*     @name = value
irb(main):286*   end
irb(main):287> end
=> :name=
irb(main):288> user = User7.new("Alice")
=> #<User7:0x0000000107417898 @name="Alice">
irb(main):289> user.name
=> "Alice"
irb(main):290> user.name="Bob"
=> "Bob"
irb(main):291> user.name
=> "Bob"
irb(main):292>

  • 普段railsで行っているuser.nameuser.name="Bob"はクラスの中でこういう処理をしてくれているおかげなのか

感想

インスタンス変数の書き間違え、代入をするとおかしな結果になる
ローカル変数は必ず代入して処理をする

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?