🔖

【Ruby】「ゲッター」と「セッター」の役割

2022/02/10に公開

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