これは何か?
インスタンス変数
インスタンス変数とは、オブジェクトが抱えている変数のこと。
例えば下記のようなrubyファイルにUserクラスがあったとする。
class User end
ここで、rubyのセッターとゲッターという概念が登場する。
class User def name=(name) @name = name end def name @name end end
irbを起動して動作を確認してみる
$ irb irb(main):001:0> require './user.rb' => true irb(main):002:0> user = User.new => #<User:0x00007fc32d1cf3e8> irb(main):003:0> user.name = 'hoge' => "hoge" irb(main):004:0> user.name => "hoge"
hogeという値をuserオブジェクトのnameに代入しました。 ここで、userオブジェクトの中身を確認してみます。
irb(main):005:0> user => #<User:0x00007ffd56056d50 @name="hoge">
userオブジェクトが「hoge」を抱えている様子がわかりますね。 このuserオブジェクトが抱えているnameを 属性(Attribute) と呼ぶことがあります。
attr_accesorを使う
実は、このゲッターやセッターはもっと簡略化して記述することが可能です。 それは、attr_accessorというメソッドによって実現されます。
先程のコードを例に出すと、下記のように記述可能です。
class User attr_accessor :name end
とても簡単ですね!!👏
サービスに当てはめると?
Webサービスに当てはめると、Userが持つ情報は、name以外にあるはずです。 例えば、メールアドレスや性別などがあります。
このときに、先程のattr_accessorで複数個の属性を定義することができます。
class User attr_accessor :name, :email, :sex end
$ irb / 省略 irb(main):002:0> user = User.new => #<User:0x00007f9936342cc8> irb(main):003:0> user.name = "Mario" => "Mario" irb(main):004:0> user.email = "test@sample.com" => "test@sample.com" irb(main):005:0> user.sex = "male" => "male" irb(main):006:0> user => #<User:0x00007f9936342cc8 @name="Mario", @email="test@sample.com", @sex="male">
こうして、userオブジェクトに複数個の属性を定義することができました。