Comece agoraComece grátis

Primeiro o mais importante

Existe um método público especial chamado initialize() (observe a grafia em inglês americano). Ele não é chamado diretamente pelo usuário. Em vez disso, é chamado automaticamente quando um objeto é criado; ou seja, quando o usuário chama new().

initialize() permite definir os valores dos campos privados ao criar um objeto R6. O padrão para uma função initialize() é o seguinte:

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
      }
    }
  )
)

Note o uso de missing() (docs). Essa função retorna TRUE se um argumento não foi passado na chamada da função.

Os argumentos para o método new() da fábrica são passados para initialize().

a_thing <- thing_factory$new(
  a_field = "a different value", 
  another_field = 456
)

Este exercicio faz parte do curso

Programação Orientada a Objetos com S3 e R6 em R

Ver curso

Instruções do exercicio

Uma fábrica de micro-ondas foi parcialmente definida para você.

  • Adicione um método público chamado initialize(). Ele deve permitir que o usuário defina os campos power_rating_watts e door_is_open quando o objeto for criado.
    • Os argumentos devem ser power_rating_watts e door_is_open.
    • No corpo do método initialize(), para cada argumento, se ele não estiver missing() (docs), então o campo privado correspondente deve ser definido.
  • Crie um objeto de micro-ondas com potência de 650 watts e porta aberta.
    • Chame o método new() de microwave_oven_factory.
    • Passe os argumentos power_rating_watts = 650 e door_is_open = TRUE para new().
    • Atribua o resultado a a_microwave_oven.

exercicio interativo prático

Tente este exercicio completando este código de exemplo.

# 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 <- ___
Editar e Executar Código