🔖
【Ruby】「ゲッター」と「セッター」の役割
Rubyにおける「ゲッター」と「セッター」について解説します。
インスタンス変数を使用するときに出てくるキーワードです。
「ゲッター」は、インスタンス変数をクラス内から参照するメソッド
ゲッターとは、インスタンス変数をクラス内から参照するメソッドです。コード例は以下のようになります。
Class User
def name
@name
end
end
クラス内にメソッドを作ったあと、user.nameを使えるかというと、以下のようにエラーになってしまいます。
> user = User.new("Tom")
=> #<User:0x00007fd88d1074e0 @name="Tom">
>user.name
=> NoMethodError (undefined method `name' for #<User:0x00007fd88e0707b0 @name="Tom">)
インスタンス変数を参照することはできますが、値がまだ入っていないからですね。こちらのエラーを解消するために、セッターを使っていきます。
「セッター」は、インスタンス変数に値を代入するメソッド
インスタンス変数に値を代入するメソッドを「セッター」と言います。コード例は以下です。
Class User
def name=(name) #セッター
@name = name
end
def name #ゲッター
@name
end
end
先程のエラーは、nameメソッドに対してエラーが出ていましたが、今回はどうでしょうか。
>user = User.new("Tom")
=> #<User:0x00007fd88d1074e0 @name="Tom">
>user.name
=> "Tom"
ゲッターとセッター両方を使うことで、インスタンス変数を使えることができました。インスタンス変数は、参照して値を代入して使うことができます。
3種類のアクセスメソッドを使って、「ゲッター」や「セッター」を簡単に定義する
- attr_reader(ゲッター)
- attr_writer(セッター)
- attr_accessor(ゲッターとセッター)
ゲッターやセッターを定義するために、3種類のアクセスメソッドというものが用意されています。今回は「ゲッター」と「セッター」についての記事なので割愛しますが、ぜひ使い方を調べてみてください。
Discussion