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

Ö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

Kursa Göz Atın

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şturulurken power_rating_watts ve door_is_open alanlarının kullanıcı tarafından ayarlanmasını sağlamalı.
    • Argümanlar power_rating_watts ve door_is_open olmalı.
    • initialize() metodunun gövdesinde, her argüman için, eğer missing() (docs) değilse, ilgili özel (private) alan ayarlanmalı.
  • Güç değeri 650 watt olan ve kapısı açık bir mikrodalga nesnesi oluştur.
    • microwave_oven_factory'nin new() metodunu çağır.
    • new()'a power_rating_watts = 650 ve door_is_open = TRUE argümanlarını geçir.
    • Sonucu a_microwave_oven değ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 <- ___
Kodu Düzenle ve Çalıştır