Utamakan yang Pertama
Ada satu metode publik khusus bernama initialize() (perhatikan ejaan American English). Metode ini tidak dipanggil langsung oleh pengguna. Sebaliknya, ia dipanggil secara otomatis saat sebuah objek dibuat; yaitu ketika pengguna memanggil new().
initialize() memungkinkan Anda mengatur nilai field privat ketika Anda membuat objek R6. Pola untuk fungsi initialize() adalah sebagai berikut:
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
}
}
)
)
Perhatikan penggunaan missing() (docs). Fungsi ini mengembalikan TRUE jika sebuah argumen tidak diberikan dalam pemanggilan fungsi.
Argumen untuk metode new() pada factory akan diteruskan ke initialize().
a_thing <- thing_factory$new(
a_field = "a different value",
another_field = 456
)
Latihan ini adalah bagian dari kursus
Pemrograman Berorientasi Objek dengan S3 dan R6 di R
Petunjuk latihan
Sebuah factory oven microwave telah didefinisikan sebagian untuk Anda.
- Tambahkan metode publik bernama
initialize(). Metode ini harus memungkinkan pengguna menyetel fieldpower_rating_wattsdandoor_is_opensaat objek dibuat.- Argumennya harus
power_rating_wattsdandoor_is_open. - Di dalam badan metode
initialize(), untuk setiap argumen, jika argumen tersebut tidakmissing()(docs), maka field privat yang sesuai harus disetel.
- Argumennya harus
- Buat sebuah objek microwave dengan daya
650watt, dan pintu terbuka.- Panggil metode
new()milikmicrowave_oven_factory. - Teruskan argumen
power_rating_watts = 650dandoor_is_open = TRUEkenew(). - Simpan hasilnya ke
a_microwave_oven.
- Panggil metode
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
# 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 <- ___