LoslegenKostenlos loslegen

Die Leistung auslesen

Die von einem R6-Objekt gespeicherten Daten sind absichtlich vor Nutzer:innen verborgen, indem sie im Element private gehalten werden. Das ist das Prinzip der Kapselung.

Wenn du Zugriff auf einzelne Datenwerte bereitstellen möchtest, kannst du ein aktives Binding verwenden. Das sind Funktionen, die sich wie Variablen verhalten.

Aktive Bindings werden im Element active eines R6-Objekts gespeichert. Um ein aktives Binding zu erstellen, das ein privates Datenfeld ausliest (also ein „schreibgeschütztes“ Binding), definierst du eine Funktion ohne Argumente, die einfach das private Element zurückgibt.

Das Muster zum Erstellen eines schreibgeschützten aktiven Bindings sieht so aus:

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function() {
      private$..a_field
    }
  )
)

Das aktive Binding wird wie eine Datenvariable aufgerufen, nicht wie eine Funktion.

a_thing <- thing_factory$new()
a_thing$a_field   # nicht a_thing$a_field()

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung mit S3 und R6 in R

Kurs anzeigen

Anleitung zur Übung

Eine Mikrowellenfabrik wurde teilweise für dich definiert.

  • Ergänze die Definition um ein schreibgeschütztes aktives Binding, das die Ausgangsleistung liefert.
    • Das aktive Binding soll power_rating_watts heißen.
    • Es wird als Funktion ohne Argumente definiert.
    • Der Funktionskörper soll einfach das private Feld ..power_rating_watts zurückgeben.
  • Erzeuge ein Mikrowellen-Objekt und weise es a_microwave_oven zu.
  • Lies seine Leistung aus.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

# 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
___
Code bearbeiten und ausführen