アクセスメソッド(アクセサ)

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

Rubyのクラスでは、クラスの外部からインスタンス変数に直接アクセスすることができません。
いわば、インスタンス変数は、privateなメンバ変数になっていると言えます。
そこで、インスタンス変数にアクセスし参照や変更を行うには、アクセスメソッド(アクセサ・アクセッサ)を定義します。

スポンサーリンク

class Profile
    def initialize(name_one = "Tom")
        @name = name_one
    end
    # 名前を得る
    def get_name
        return @name
    end
    # 名前を変更
    def set_name=(new_name)
        @name = new_name
    end
end
 
wil = Profile.new("Wiliam")
 
puts wil.get_name
# 綴り間違い。Williamに訂正する
wil.set_name = "William"
puts wil.get_name

まず、Rubyの特徴として、メソッドであってもインスタンス変数(プロパティ)のように呼び出すことができます。
「puts wil.get_name」は、「puts wil.get_name()」と書くのと同じ意味で、実際後者のように書いても同じ動作となります。
インスタンス変数は、他の言語では、メンバ変数やプロパティなどとも呼ばれます。

また、名前を変更するメソッド名が、「set_name=」となっていることに注意です。
これにより、メソッドをあたかも、インスタンス変数への代入文のごとく呼び出すことができます。
「wil.set_name = “William”」は、一見代入文のように見えますが、実際には、「wil.set_name=(“William”)」と引数を渡してのメソッド呼び出しとなっています。(後者のように書いても同じ動作です。)

こういった仕様になっているのは、クラスのデータ構造を隠蔽することに役立ちます。
Rubyは洗練された言語だなぁ、という印象を持ちました。

実行結果。

Wiliam
William
スポンサーリンク
 
スポンサーリンク