مراجعة - المال والعملة
جزء من قسم البرمجة كائنية التوجه في رحلة 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
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكال3وراثة S3
متجهات الأصنافترتيب البحث عن الأساليبالتوسعة باستخدام NextMethodالتحقق باستخدام inherits()مراجعة - رواتب الموظفين6S4 الدوال العامة والطرق
إنشاء الدوال العامةالطرق للدوال المضمّنةاختيار الطريقة بناءً على وسيطينsetValidity و validObjectمراجعة - المال والعملةتدرّب بنفسك: مترجم R عبر الإنترنت