مراجعة - متتبّع الطلبات
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 36 من 57.
التحدي
متوسطتتبّع الطلبات باستخدام الأصناف الخاصة بهذا الفصل.
- يحتوي التعداد
Statusعلى الثوابتNEWوPAIDوSHIPPEDوDELIVEREDوCANCELLED، ولكل منهاlabel(newوpaidو...)، وcanMoveTo(next): يمكن أن تصبح new هي paid أو cancelled، ويمكن أن تصبح paid هي shipped أو cancelled، ويمكن أن تصبح shipped هي delivered، ولا يُسمح بأي انتقال آخر. Order(id, item, status)هو صنف بيانات تبدأ حالته كـNEW.- تحتوي الواجهة المختومة
Outcomeعلى الحالتينUpdated(order)وRejected(id, reason). - تنشئ
Tracker.place(item)طلبًا بالمعرّف التالي (1، 2، ...) وتعيده. تُعيدmove(id, target)القيمةRejectedمعno such orderأوcannot go from new to delivered، أو تخزّن نسخةً مُعدّلة من الطلب وتُعيدUpdated. تُعيدsummary()عدد الطلبات لكل حالة وفق ترتيب التعداد، مع استبعاد الحالات التي لا تحتوي على أي طلب:paid 1, cancelled 1، أوno orders. - تستخدم
describe(outcome)تعبيرwhenشاملًا وتُعيد نص الطلب المُحدَّث أوrejected 2: no such order.
يقرأ الكود المزوَّد الأوامر place tea أو <status> <id> مثل paid 1، ويطبع كل طلب موضوع، وكل نتيجة موصوفة، ثم الملخص في النهاية.
ضع الكود الخاص بك في Status.kt وOrder.kt وOutcome.kt وUpdated.kt وRejected.kt وTracker.kt وFunctions.kt. يحتوي Main.kt على كود الإدخال/الإخراج المزوَّد ولا يمكن تعديله.
جرّب بنفسك
fun main() {
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
val input = generateSequence(::readLine).toList()
val tracker = Tracker()
for (cmd in input) {
val p = cmd.split(" ")
if (p[0] == "place") {
println(tracker.place(p[1]))
} else {
val target = Status.entries.find { it.label == p[0] }
if (target == null) println("unknown status ${p[0]}")
else println(describe(tracker.move(p[1].toInt(), target)))
}
}
println(tracker.summary())
}
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتالمنشئات الأساسيةكتل init والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفين7الفئات الخاصة
فئات البياناتفئات التعدادالتسلسلات الهرمية المغلقةequals، hashCode، toStringمراجعة - متتبّع الطلباتتدرّب بنفسك: Playground لـ Kotlin