私はPragmatic Bookselfの "Programming Ruby 1.9 (3rd Edition)"を使い始めました。私はちょっとした説明が必要なコードを見つけました。Rubyを使って仮想属性のインスタンス変数を呼び出す
書籍を所有している場合は、第3章の「クラス、オブジェクト、変数」、特に仮想属性に関するセクションを参照してください。
基本的に、いくつかのインスタンス変数を設定するイニシャライザでクラスを定義します。そのうちの1つは@price
です。この変数は、そのようなattr_accessorで作成したアクセサ/ミューテータを持っています
attr_accessor :price
、単にこの行から値を返すと呼ばれる仮想属性、price_in_cents
を持っていることをクラス:
Integer(price*100 + 0.5)
今、私の質問をされますなぜ仮想属性内のprice
に@
という接頭辞が付きませんか?これは明らかにインスタンス変数を扱っています。 @
を使わないでコードを実行すると、と同じように動作します。何故ですか?
P.S.申し訳ありませんがコードを卸売するだけではなく、これは本のコードに関する質問であるため、私はどのような法的権利を掲示しなければならないのかよく分かりませんでした。
これは、単に 'price'を返すだけではない場合に備えて、' price'変数がアクセサを提供するクラスを通してアクセスされるようにするためです。 –
@ Jean-Charles:そうです。基本的にはオブジェクト指向の基本原理です。*すべてがメッセージ送信*です。変数へのアクセスは、メッセージ送信ではなく、オブジェクト指向ではないため、可能ならば避けるべきです。これはあなたの*表現の独立性を買います*:price_in_centsメソッドは、価格を表現する方法を完全に知らないので、コードを変更せずに表現を変更することができます(インスタンス変数の代わりにdatabseseから引き出すなど)。 –