1. 학습
  2. /
  3. 강의
  4. /
  5. R における S3 と R6 を使ったオブジェクト指向プログラミング

Connected

연습 문제

定格出力を読み取る

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() ではありません

지침

100 XP

電子レンジのファクトリーが一部定義されています。

  • 定義を更新して、定格出力を取得する読み取り専用のアクティブバインディングを追加してください。
    • アクティブバインディングの名前は power_rating_watts にします。
    • 引数を取らない関数として定義します。
    • 本体ではプライベートフィールド ..power_rating_watts をそのまま返します。
  • 電子レンジオブジェクトを作成し、a_microwave_oven に代入します。
  • その定格出力を読み取ってください。