مراجعة - قائمة المهام
جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 41 من 57.
التحدي
متوسطأنشئ قائمة انتظار للمهام من صنفين مرجعيين. كلا التعريفين ملفوفان داخل suppressMessages().
TaskفيTask.R: الحقولtitleوpriority(رقمي) وdone(منطقي)؛ تجعلinitializeقيمةdoneهيFALSEعندما لا يتم تقديمها؛ تُرجعlabel()القيمة[x] fix (3)للمهمة المكتملة أو[ ] fix (3).TaskQueueفيTaskQueue.R: الحقلtasks(وهوlist)؛ تضيفadd(title, priority)كائنTaskجديدًا وتُرجعinvisible(.self)؛ تُرجعnext_task()عنوان المهمة المفتوحة ذات الأولوية الأعلى (والتي أُضيفت أولًا عند التعادل)، أوnothing؛ تضعcomplete(title)علامة الاكتمال على أول مهمة مفتوحة تحمل ذلك العنوان وتُرجعTRUE، أوFALSE؛ تُرجعreport()تسمية واحدة لكل مهمة بترتيب الإضافة، ثمopen: 2.
يقرأ الكود المُزوَّد add fix 3 وnext وdone fix، ثم يضيف مهمتين في استدعاء واحد متسلسل ويطبع التقرير.
ضع الكود الخاص بك في Task.R وTaskQueue.R. يحتوي main.R على كود الإدخال/الإخراج المُزوَّد ولا يمكن تعديله.
جرّب بنفسك
source("Task.R")
source("TaskQueue.R")
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
q <- TaskQueue$new()
for (line in input) {
p <- strsplit(line, " ")[[1]]
if (p[1] == "add") {
q$add(p[2], as.numeric(p[3]))
} else if (p[1] == "next") {
cat("next: ", q$next_task(), "\n", sep = "")
} else if (p[1] == "done") {
cat(if (q$complete(p[2])) "completed " else "no open task ", p[2], "\n", sep = "")
}
}
q$add("late", 1)$add("later", 1)
writeLines(q$report())
جميع دروس البرمجة كائنية التوجه
1أساسيات S3
التعامل مع الملفاتالقوائم باستخدام فئةدوال المُنشئأساليب الطباعة والتنسيقأدوات التحقق والمساعدةمراجعة - درجات الحرارة2S3 الدوال العامة والطرق
الدوال العامة وUseMethodالطرق الافتراضيةطرق الدوال العامة الأساسيةأساسيات NextMethodمراجعة - مساحات الأشكال8الأصناف المرجعية
تعريف الأصناف المرجعيةتحديث الأساليب والحقولدلالات النسخالوراثة وcallSuperمراجعة - قائمة المهامتدرّب بنفسك: مترجم R عبر الإنترنت