Menu
Coddy logo textTech

Sınıf ile Listeler

Coddy'nin R Journey'sinin Nesne Tabanlı Programlama bölümünün bir parçası. Ders 2 / 57.

S3, R'nin en eski ve en yaygın kullanılan nesne sistemidir. S3 nesnesi, ne tür bir nesne olduğunu belirten bir etiket olan class özniteliğine sahip sıradan bir listedir. class(x) <- "dog" etiketi ayarlar:

rex <- list(name = "Rex", age = 3)
class(rex) <- "dog"
print(class(rex))
cat(rex$name, "is", rex$age)

Çıktı:

[1] "dog"
Rex is 3

structure() değeri oluşturur ve özniteliklerini tek bir çağrıda ayarlar; bu, bir S3 nesnesi oluşturmanın yaygın yoludur. Alanlar, herhangi bir listede olduğu gibi $ ile okunur:

rex <- structure(list(name = "Rex", age = 3), class = "dog")
print(class(rex))
print(is.list(rex))
print(rex$age)

Çıktı:

[1] "dog"
[1] TRUE
[1] 3

Sınıf yalnızca bir etikettir: R, bir nesnenin hangi alanlara sahip olduğunu denetlemez; bu nedenle herhangi bir listeye dog adı verilebilir. unclass() etiketi kaldırır ve düz listeyi geri verir:

p <- structure(list(x = 1, y = 2), class = "point")
print(unclass(p))

Çıktı:

$x
[1] 1

$y
[1] 2

S3 nesneleri değerlerdir. Bir nesneyi değiştiren bir işlev kendi kopyasını değiştirir; bu nedenle yeni sürümü döndürür ve çağıran kişi bunu atar. Orijinal nesne olduğu gibi kalır:

birthday <- function(d) {
  d$age <- d$age + 1
  d
}
rex <- structure(list(name = "Rex", age = 3), class = "dog")
older <- birthday(rex)
cat(rex$age, older$age)

Çıktı:

3 4
challenge icon

Görev

Kolay

make_pet(name, species, age) işlevini Pet.R içinde tamamla. Bu işlev, name, species ve age alanlarını bu sırayla ve pet sınıfını içeren bir liste döndürür. Ardından, tek bir cümle döndüren describe_pet(p) işlevini tamamla: adı Rex, türü dog ve yaşı 3 olan bir evcil hayvan için sonuç Rex is a 3 year old dog olur.

Sağlanan kod adı, türü ve yaşı okur; evcil hayvanı oluşturur ve sınıfını, alan adlarını ve cümleyi yazdırır.

Kodun Pet.R içine yazılmalıdır. main.R, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

source("Pet.R")

# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input <- suppressWarnings(readLines(file("stdin")))
p <- make_pet(input[1], input[2], as.numeric(input[3]))
cat("class: ", class(p), "\n", sep = "")
cat("fields: ", paste(names(p), collapse = ", "), "\n", sep = "")
cat(describe_pet(p), "\n", sep = "")
quiz iconKendini test et

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

Kendi başına pratik yap: Online R derleyicisi