Önce İlk İşler
Amerikan İngilizcesi yazımıyla initialize() adında özel bir genel (public) metot vardır. Bu metot kullanıcı tarafından doğrudan çağrılmaz. Bunun yerine, bir nesne oluşturulduğunda, yani kullanıcı new() çağırdığında otomatik olarak çalışır.
initialize(), bir R6 nesnesi oluştururken özel (private) alanların değerlerini ayarlamana olanak tanır. Bir initialize() fonksiyonu için desen şöyledir:
thing_factory <- R6Class(
"Thing",
private = list(
a_field = "a value",
another_field = 123
),
public = list(
initialize = function(a_field, another_field) {
if(!missing(a_field)) {
private$a_field <- a_field
}
if(!missing(another_field)) {
private$another_field <- another_field
}
}
)
)
missing() (docs) kullanımına dikkat et. Bu, bir argüman fonksiyon çağrısında iletilmemişse TRUE döndürür.
Fabrikanın new() metoduna verilen argümanlar initialize()'a aktarılır.
a_thing <- thing_factory$new(
a_field = "a different value",
another_field = 456
)
Bu egzersiz, kursun bir parçasıdır
R'de S3 ve R6 ile Nesne Yönelimli Programlama
Egzersiz talimatları
Senin için kısmen tanımlanmış bir mikrodalga fırın fabrikası var.
initialize()adlı bir genel (public) metot ekle. Bu, nesne oluşturulurkenpower_rating_wattsvedoor_is_openalanlarının kullanıcı tarafından ayarlanmasını sağlamalı.- Argümanlar
power_rating_wattsvedoor_is_openolmalı. initialize()metodunun gövdesinde, her argüman için, eğermissing()(docs) değilse, ilgili özel (private) alan ayarlanmalı.
- Argümanlar
- Güç değeri
650watt olan ve kapısı açık bir mikrodalga nesnesi oluştur.microwave_oven_factory'ninnew()metodunu çağır.new()'apower_rating_watts = 650vedoor_is_open = TRUEargümanlarını geçir.- Sonucu
a_microwave_ovendeğişkenine ata.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
# Add an initialize method
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
power_rating_watts = 800,
door_is_open = FALSE
),
public = list(
cook = function(time_seconds) {
Sys.sleep(time_seconds)
print("Your food is cooked!")
},
open_door = function() {
private$door_is_open <- TRUE
},
close_door = function() {
private$door_is_open <- FALSE
},
# Add initialize() method here
___ = ___(___, ___) {
if(!missing(power_rating_watts)) {
private$power_rating_watts <- power_rating_watts
}
___
}
)
)
# Make a microwave
a_microwave_oven <- ___