Pembaruan method dan field
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 38 dari 57.
Method diletakkan dalam list methods dari setRefClass(). Di dalam method, field ditulis sebagai nama biasa, dan <<- mengubah field. Di Coddy runner, R mencetak catatan tentang package codetools yang bersifat opsional saat class dengan method didefinisikan, jadi bungkus definisinya dengan suppressMessages():
Counter <- suppressMessages(setRefClass("Counter",
fields = list(count = "numeric"),
methods = list(
add = function(n = 1) {
count <<- count + n
},
report = function() paste("count is", count)
)
))
c1 <- Counter$new(count = 0)
c1$add()
c1$add(5)
print(c1$report())Output:
[1] "count is 6".self adalah object tempat method dipanggil. Method yang diakhiri dengan invisible(.self) mengembalikan object tersebut, sehingga pemanggilan dapat dirangkai:
Counter <- suppressMessages(setRefClass("Counter",
fields = list(count = "numeric"),
methods = list(
add = function(n = 1) {
count <<- count + n
invisible(.self)
}
)
))
c1 <- Counter$new(count = 0)
c1$add(2)$add(3)$add(4)
print(c1$count)Output:
[1] 9Method initialize berjalan di dalam $new(). initFields(...) menetapkan field yang diberikan, setelah itu method dapat memberikan nilai default kepada field lainnya. Method saling memanggil dengan namanya:
Account <- suppressMessages(setRefClass("Account",
fields = list(owner = "character", balance = "numeric"),
methods = list(
initialize = function(...) {
initFields(...)
if (length(balance) == 0) balance <<- 0
invisible(.self)
},
deposit = function(x) balance <<- balance + x,
deposit_twice = function(x) {
deposit(x)
deposit(x)
}
)
))
a <- Account$new(owner = "Ada")
a$deposit_twice(10)
print(a$balance)Output:
[1] 20Di dalam method, <- biasa pada nama field membuat variabel lokal dengan nama tersebut dan membiarkan field tetap tidak berubah. Gunakan <<- untuk setiap perubahan pada field:
Counter <- suppressMessages(setRefClass("Counter",
fields = list(count = "numeric"),
methods = list(
broken = function() count <- count + 1,
working = function() count <<- count + 1
)
))
c1 <- Counter$new(count = 0)
c1$broken()
c1$broken()
c1$working()
print(c1$count)Output:
[1] 1Tantangan
MudahLengkapi Reference Class Stack di Stack.R. Class ini menyimpan itemnya di field items (character, item teratas berada di posisi terakhir) dan memiliki empat method:
push(x)menambahkanxke bagian atas dan mengembalikaninvisible(.self), sehingga pemanggilan push dapat dirangkai;pop()menghapus dan mengembalikan item teratas, atau mengembalikannothingsaat stack kosong;peek()mengembalikan item teratas tanpa menghapusnya, ataunothing;size()mengembalikan jumlah item.
Definisinya sudah dibungkus dengan suppressMessages(). Kode yang disediakan membaca perintah push a b, pop, dan peek, lalu menambahkan dua item lagi dalam satu pemanggilan berantai dan mencetak ukurannya.
Tulis kodemu di Stack.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
source("Stack.R")
# Kode input/output yang disediakan: biarkan apa adanya
input <- suppressWarnings(readLines(file("stdin")))
s <- Stack$new()
for (cmd in input) {
if (startsWith(cmd, "push ")) {
items <- strsplit(substring(cmd, 6), " ")[[1]]
for (it in items) s$push(it)
} else if (cmd == "pop") {
cat("popped ", s$pop(), "\n", sep = "")
} else if (cmd == "peek") {
cat("top ", s$peek(), "\n", sep = "")
}
}
s$push("x")$push("y")
cat("size after two chained pushes: ", s$size(), "\n", sep = "")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar S3
Bekerja dengan fileList dengan classFungsi KonstruktorMethod print dan formatValidator dan helperUlasan: Suhu4Enkapsulasi di R
Closure sebagai objectEnvironment sebagai objectFungsi accessorMelindungi stateRangkuman: Meter Parkir2S3 Generics dan Method
Generics dan UseMethodMethod DefaultMethod untuk Base GenericsDasar-Dasar NextMethodRekap: Luas Bangun5S4 class
Mendefinisikan class S4Slots dan AksesPemeriksaan ValiditasMethod showRingkasan: Katalog Produk8Kelas Referensi
Mendefinisikan Kelas ReferensiPembaruan method dan fieldSemantik PenyalinanPewarisan dan callSuperRangkuman: Antrean Tugas11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam BukuLatihan sendiri: Compiler R online