定格出力を読み取る
R6 オブジェクトが保持するデータは、private 要素に格納してユーザーから見えないようにしています。これは「カプセル化」という考え方です。
データ値へのアクセスを提供したい場合は、アクティブバインディングを使います。これは関数ですが、変数のように振る舞います。
アクティブバインディングは R6 オブジェクトの active 要素に保存されます。プライベートなデータフィールドを取得する(つまり「読み取り専用」の)アクティブバインディングを作るには、引数を取らず、プライベート要素をそのまま返す関数を定義します。
読み取り専用のアクティブバインディングを作るパターンは次のとおりです。
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
アクティブバインディングは関数ではなく、データ変数のように呼び出します。
a_thing <- thing_factory$new()
a_thing$a_field # a_thing$a_field() ではありません
この演習はコースの一部です
R における S3 と R6 を使ったオブジェクト指向プログラミング
演習の手順
電子レンジのファクトリーが一部定義されています。
- 定義を更新して、定格出力を取得する読み取り専用のアクティブバインディングを追加してください。
- アクティブバインディングの名前は
power_rating_wattsにします。 - 引数を取らない関数として定義します。
- 本体ではプライベートフィールド
..power_rating_wattsをそのまま返します。
- アクティブバインディングの名前は
- 電子レンジオブジェクトを作成し、
a_microwave_ovenに代入します。 - その定格出力を読み取ってください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800
),
active = list(
# Add the binding here
___ = ___
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power rating
___