BaşlayınÜcretsiz başlayın

Gücü Kontrol Et

Active binding'ler özel (private) alanları ayarlamak için de kullanılabilir. Bu durumda, binding fonksiyonu "value" adlı tek bir argümanı kabul etmelidir.

Okuma/yazma (read/write) active binding oluşturma deseni aşağıdaki gibidir.

thing_factory <- R6Class(
  "Thing",
  private = list(
    ..a_field = "a value"
  ),
  active = list(
    a_field = function(value) {
      if(missing(value)) {
        private$..a_field
      } else {
        assert_is_a_string(value) # veya başka bir doğrulama
        private$..a_field <- value
      }
    }
  )
)

Değerler, binding bir fonksiyon değil de veri değişkeniymiş gibi atanır.

a_thing <- thing_factory$new()
a_thing$a_field <- "a new value" # a_thing$a_field("a new value") değil

Bu egzersiz, kursun bir parçasıdır

R'de S3 ve R6 ile Nesne Yönelimli Programlama

Kursa Göz Atın

Egzersiz talimatları

Bir mikrodalga fırın sınıfı kısmen senin için tanımlandı.

  • Mikrodalga fırın sınıfının tanımını, bir active liste öğesi içerecek şekilde genişlet.
  • Güç seviyesini kontrol eden bir active binding'i active öğesine ekle.
    • Fonksiyonun adı power_level_watts olmalı.
    • value adlı tek bir argüman kabul etmeli.
    • Alıp/ayarlayacağın özel değişkenin adı ..power_level_watts.
    • value'nun tek bir sayı olduğunu doğrulamak için assert_is_a_number() (docs) kullan.
    • value'nun 0 ile ..power_rating_watts arasında olduğunu doğrulamak için assert_all_are_in_closed_range() (docs) kullan.
  • Bir mikrodalga fırın nesnesi oluştur ve a_microwave_oven değişkenine ata.
  • Güç seviyesini al.
  • Güç seviyesini, string olarak "400" değerine ayarlamayı dene.
  • Güç seviyesini 1600 olarak ayarlamayı dene.
  • Güç seviyesini 400 olarak ayarla.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

# Add a binding for power rating
microwave_oven_factory <- R6Class(
  "MicrowaveOven",
  private = list(
    ..power_rating_watts = 800,
    ..power_level_watts = 800
  ),
  # Add active list containing an active binding
  ___ = ___(
    ___ = ___(___) {
      if(missing(___)) {
        # Return the private value
        ___
      } else {
        # Assert that value is a number
        ___
        # Assert that value is in a closed range from 0 to power rating
        ___
        # Set the private power level to value
        ___ <- ___
      }
    }
  )
)

# Make a microwave 
a_microwave_oven <- ___

# Get the power level
___

# Try to set the power level to "400"
___ <- ___

# Try to set the power level to 1600 watts
___ <- ___

# Set the power level to 400 watts
___ <- ___
Kodu Düzenle ve Çalıştır