Menu
CoddyTech

רשימות עם מחלקה

חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 2 מתוך 57.

S3 היא מערכת העצמים הוותיקה והנפוצה ביותר של R. אובייקט S3 הוא רשימה רגילה עם מאפיין class, תווית שמציינת איזה סוג של אובייקט הוא. class(x) <- "dog" מגדיר את התווית:

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

פלט:

[1] "dog"
Rex is 3

structure() בונה את הערך ומגדירה את התכונות שלו בקריאה אחת, וזו הדרך המקובלת ליצור אובייקט S3. קוראים את השדות באמצעות $, כמו בכל רשימה:

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

פלט:

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

המחלקה היא רק תווית: R לא בודקת אילו שדות יש לאובייקט, ולכן אפשר לקרוא לכל רשימה dog. unclass() מסירה את התווית ומחזירה את הרשימה הרגילה:

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

פלט:

$x
[1] 1

$y
[1] 2

אובייקטי S3 הם ערכים. פונקציה שמשנה אובייקט משנה את העותק שלה, ולכן היא מחזירה את הגרסה החדשה והקורא משייך אותה. המקור נשאר כפי שהיה:

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)

פלט:

3 4
challenge icon

אתגר

קל

השלימו את make_pet(name, species, age) בקובץ Pet.R. הפונקציה מחזירה רשימה עם השדות name, species ו-age, בסדר הזה, והמחלקה pet. לאחר מכן השלימו את describe_pet(p), שמחזירה משפט אחד: חיית מחמד בשם Rex, מהמין dog, ובגיל 3 מחזירה את Rex is a 3 year old dog.

הקוד שסופק קורא את השם, המין והגיל, יוצר את חיית המחמד ומדפיס את המחלקה שלה, את שמות השדות שלה ואת המשפט.

הקוד שלכם ייכתב בקובץ Pet.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק ואי אפשר לערוך אותו.

נסו בעצמכם

source("Pet.R")

# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
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 iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר R אונליין