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
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
activeliste öğesi içerecek şekilde genişlet. - Güç seviyesini kontrol eden bir active binding'i
activeöğesine ekle.- Fonksiyonun adı
power_level_wattsolmalı. valueadlı 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çinassert_is_a_number()(docs) kullan.value'nun0ile..power_rating_wattsarasında olduğunu doğrulamak içinassert_all_are_in_closed_range()(docs) kullan.
- Fonksiyonun adı
- Bir mikrodalga fırın nesnesi oluştur ve
a_microwave_ovendeğişkenine ata. - Güç seviyesini al.
- Güç seviyesini, string olarak
"400"değerine ayarlamayı dene. - Güç seviyesini
1600olarak ayarlamayı dene. - Güç seviyesini
400olarak 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
___ <- ___