アクセスメソッド(アクセサ)
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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
スポンサーリンク
<< 前の記事 : Rubyのクラス定義・initialize(コンストラクタ)
- - 関連記事 -
- 特異クラスによるクラスメソッド定義・class << self ~ end
- モジュールの使い方
- クラス定義でメソッドへのアクセス制限・public, private, protected
- クラス継承
- クラス拡張
- クラス変数・クラスメソッド
- アクセスメソッド(アクセサ)をattr_reader, attr_writer, attr_accessorで定義
- Rubyのクラス定義・initialize(コンストラクタ)
- スーパークラスとサブクラス・クラス継承
- classメソッド・オブジェクトが属するクラスを調べる
- private, protected アクセス指定の違い
- オブジェクトのコピーを作る
- Rubyのinitializeメソッドの継承
スポンサーリンク