Geçerlilik Kontrolleri
Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 24 / 57.
Türler R tarafından denetlenir; değerlerle ilgili kurallar size aittir. setClass() işlevinin validity argümanı, nesne uygunsa TRUE döndüren veya sorunu açıklayan bir karakter dizisi döndüren object işlevdir. new() bunu her nesne için çalıştırır:
setClass("Account", slots = c(owner = "character", balance = "numeric"),
validity = function(object) {
if (object@balance < 0) return("balance must not be negative")
TRUE
})
ok <- new("Account", owner = "Ada", balance = 10)
msg <- tryCatch(new("Account", owner = "Bo", balance = -5), error = function(e) conditionMessage(e))
cat(msg)Çıktı:
invalid class “Account” object: balance must not be negativeBir geçerlilik işlevi, bir karakter vektörü döndürerek aynı anda birkaç sorun bildirebilir. R, hata iletisinde bunları numaralandırır:
setClass("Range", slots = c(lo = "numeric", hi = "numeric"),
validity = function(object) {
problems <- character(0)
if (length(object@lo) != 1) problems <- c(problems, "lo must be one number")
if (length(object@hi) != 1) problems <- c(problems, "hi must be one number")
if (length(problems) == 0) TRUE else problems
})
msg <- tryCatch(new("Range", lo = c(1, 2), hi = numeric(0)), error = function(e) conditionMessage(e))
cat(msg)Çıktı:
invalid class “Range” object: 1: lo must be one number
invalid class “Range” object: 2: hi must be one number@<- türü denetler ancak geçerlilik işlevini çalıştırmaz; bu nedenle bir atama bir kuralı ihlal edebilir. validObject() denetimi yeniden gerçekleştirir; yuvaları değiştirdikten sonra onu çağırın:
setClass("Account", slots = c(balance = "numeric"),
validity = function(object) if (object@balance < 0) "balance must not be negative" else TRUE)
a <- new("Account", balance = 10)
a@balance <- -99
cat("still created:", a@balance, "\n")
msg <- tryCatch(validObject(a), error = function(e) conditionMessage(e))
cat(msg, "\n")Çıktı:
still created: -99
invalid class “Account” object: balance must not be negative R, metninizin önüne invalid class “Account” object: ifadesini ekler. Mesajı kullanıcıya gösteren kod, yalnızca object: sonrasındaki kısmı tutabilir:
setClass("Account", slots = c(balance = "numeric"),
validity = function(object) if (object@balance < 0) "balance must not be negative" else TRUE)
msg <- tryCatch(new("Account", balance = -1), error = function(e) conditionMessage(e))
cat(sub(".*object: ", "", msg))Çıktı:
balance must not be negativeGörev
KolayRating sınıfını, stars (numeric) ve comment (character) yuvalarıyla birlikte Rating.R içinde tanımlayın ve ilk ihlal edilen kuralı döndüren bir geçerlilik işlevi ekleyin:
- Yıldızlar 1, 2, 3, 4 veya 5 değerlerinden biri olmadığında
stars must be a whole number from 1 to 5; - yorum 20 karakterden uzun olduğunda
comment is too long.
Aksi takdirde TRUE döndürür. Sağlanan kod, 4;Great satırlarını okur (yorum eksik olabilir), her puanlamayı oluşturur ve ok: 4/5 ya da sorun metnini yazdırır.
Kodunuz Rating.R dosyasına gitmelidir. main.R sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
source("Rating.R")
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
for (line in input) {
p <- strsplit(line, ";")[[1]]
out <- tryCatch({
r <- new("Rating", stars = as.numeric(p[1]), comment = if (length(p) > 1) p[2] else "")
paste0("ok: ", r@stars, "/5")
}, error = function(e) sub(".*object: ", "", conditionMessage(e)))
cat(out, "\n", sep = "")
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Tabanlı Programlama bölümündeki tüm dersler
1S3 Temelleri
Dosyalarla ÇalışmaSınıf ile ListelerYapıcı FonksiyonlarPrint ve Format MetotlarıDoğrulayıcılar ve YardımcılarTekrar - Sıcaklıklar4R'da Kapsülleme
Nesne Olarak Closure'larNesne Olarak OrtamlarErişimci FonksiyonlarDurumu KorumaÖzet - Parkmetre2S3 Generic'leri ve Metotları
Generic'ler ve UseMethodVarsayılan MetotlarTemel Generic'ler için MetotlarNextMethod TemelleriTekrar - Şekil Alanları5S4 Sınıfları
S4 Sınıflarını TanımlamaSlotlar ve ErişimGeçerlilik KontrolleriShow MetotlarıÖzet - Ürün Kataloğu8Referans Sınıfları
Referans Sınıflarını TanımlamaMetotlar ve Alan GüncellemeleriKopyalama SemantiğiKalıtım ve callSuperÖzet - Görev Kuyruğu11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç AlmaKendi başına pratik yap: Online R derleyicisi