はじめに
「ゲッターとは何か?」「セッターとは何か?」
また、それらを簡単に定義することのできる、「アクセスメソッドとは何か?」について、
私なりにまとめてみました。
ゲッターとは
通常、インスタンス変数内の値はクラス外からでは参照できません。
class User
def initialize(name)
@name = name
end
def
user = User.new("Tom")
user.name #=>undefined method `name' for #<User:0x00007fc5c98af3b8 @name="Tom">
これをクラス外からでもインスタンス変数内の値を参照できるようにしたメソッドのことをゲッターといいます。
class User
def initialize(name)
@name = name
end
def name #ゲッター
@name
end
end
user = User.new("Tom")
user.name #=>"Tom"
先ほどでは参照できなかった@name
内の値が、ゲッターを介すことで、参照することができているのがわかります。
セッターとは
通常、インスタンス変数内の値はクラス外からは更新ができません。
class User
def initialize(name)
@name = name
end
end
user = User.new("Tom")
user.name = "Bob" #=>undefined method `name=' for #<User:0x00007fdc0092f368 @name="Tom">
これをクラス外からでもインスタンス変数内の値を更新できるようにしたメソッドのことをセッターといいます。
class User
def initialize(name)
@name = name
end
def name=(name) #セッター
@name = name
end
end
user = User.new("Tom")
user.name = "Bob" #=>"Bob"
先ほどでは更新できなかった@name
内の値が、セッターを介すことで、更新することができているのがわかります。
※セッターは末尾に=をつけるname=(name)
アクセスメソッドを使って、ゲッターやセッターを簡単に定義する
アクセスメソッドというものを使って、ゲッターとセッターを簡単に定義することができます。
アクセスメソッドは、3種類存在します。
- attr_reader
- attr_writer
- attr_accessor
定義式 | 機能 |
---|---|
attr_reader :変数名 | ゲッターと同じ役割を持つ。インスタンス変数内の値を参照する。 |
attr_writer :変数名 | セッターと同じ役割を持つ。インスタンスな変数内の値を更新できるようにする。 |
attr_accessor :変数名 | ゲッターとセッター両方の役割を持つ。インスタンス変数内の値を参照、更新できるようにする。 |
※変数名はシンボル:変数名
で渡す。
attr_reader
ゲッターと同じ役割を持ち、インスタンス変数内の値を参照します。
class User
attr_rader :name #ゲッター
def initialize(name)
@name = name
end
end
user = User.new("Tom")
user.name #=>"Tom"
attr_writer
セッターと同じ役割を持ち、インスタンスな変数内の値を更新できるようにします。
class User
attr_writer :name #セッター
def initialize(name)
@name = name
end
end
user = User.new("Tom")
user.name = "Bob" #=>"Bob"
attr_accessor
ゲッターとセッター両方の役割を持ち、インスタンス変数内の値を参照、更新できるようにします。
class User
attr_accessor :name #ゲッターとセッター
def initialize(name)
@name = name
end
end
user = User.new("Tom")
user.name #=>"Tom"
user.name = "Bob" #=>"Bob"
##参考サイト / 書籍
現場で使える Ruby on Rails 5速習実践ガイド
Rubyリファレンス
【Ruby】「ゲッター」と「セッター」を理解する
アクセスメソッド