Menu
Coddy logo textTech

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

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין