edy hub

プログラミングやライフスタイルについて書き綴っています

Rubyの基礎を改めて学習し直してみた(インスタンス)

これは何か?

  • Rubyの文法を復習し直す場
  • RubyRailsを学習する方に向けた記事

インスタンス変数

インスタンス変数とは、オブジェクトが抱えている変数のこと。

例えば下記のような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オブジェクトに複数個の属性を定義することができました。