סיכום – כסף ומטבע
חלק מהיחידה תכנות מונחה עצמים במסלול ה-R של Coddy. שיעור 31 מתוך 57.
אתגר
בינוניבנו ספריית כסף קטנה בשני קבצים.
Money.R: המחלקהMoney(עם המשבצותamount,currency) עם כלל תקינותcurrency must be 3 capital letters(בדקו באמצעותgrepl("^[A-Z]{3}$", ...)); מתודתshow()שמדפיסה12.50 EURושורה חדשה; את+עבור שני אובייקטים מסוגMoney, שעוצרת עםcannot add EUR and USD(השתמשו ב-call. = FALSE); ואתArithעבורMoneyומספר, עםcallGeneric().Convert.R: הגנריתconvert(m, to, rates)עם מתודה עבורsignature("Money", "character")שמבצעת המרה באמצעות השערים, המציינים כמה יחידות מכל מטבע שוות ל-1 EUR: 11 USD שווים ל-10 EUR.
הקוד שסופק שומר ארנק וקורא פקודות add 10 EUR, sum (מחברת את כל הארנק), convert 2 USD (הפריט השני) או double 1, ומדפיס כל תוצאה או את error: ואת ההודעה.
כתבו את הקוד שלכם ב-Money.R וב-Convert.R. הקובץ main.R מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.
נסו בעצמכם
source("Money.R")
source("Convert.R")
# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input <- suppressWarnings(readLines(file("stdin")))
rates <- c(EUR = 1, USD = 1.1, GBP = 0.85)
wallet <- list()
for (line in input) {
p <- strsplit(line, " ")[[1]]
out <- tryCatch({
if (p[1] == "add") {
m <- new("Money", amount = as.numeric(p[2]), currency = p[3])
wallet[[length(wallet) + 1]] <- m
print(m)
} else if (p[1] == "sum") {
print(Reduce(`+`, wallet))
} else if (p[1] == "convert") {
print(convert(wallet[[as.numeric(p[2])]], p[3], rates))
} else if (p[1] == "double") {
print(wallet[[as.numeric(p[2])]] * 2)
}
}, error = function(e) cat("error: ", sub(".*object: ", "", conditionMessage(e)), "\n", sep = ""))
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות S3
עבודה עם קבציםרשימות עם מחלקהפונקציות בנאימתודות print ו-formatמאמתים ופונקציות עזרחזרה – טמפרטורות3ירושה ב-S3
וקטורי מחלקהסדר חיפוש המתודותהרחבה באמצעות NextMethodבדיקה באמצעות inherits()סיכום – שכר העובדים6S4: גנריות ומתודות
יצירת גנריותמתודות עבור רכיבים מובניםבחירת מתודה לפי שני ארגומנטיםsetValidity ו-validObjectסיכום – כסף ומטבעתרגלו בעצמכם: קומפיילר R אונליין