Rekap: Pelacak Pesanan
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Kotlin di Coddy. Pelajaran 36 dari 57.
Tantangan
SedangLacak pesanan dengan class khusus dalam bab ini.
- enum
Statusmemiliki konstantaNEW,PAID,SHIPPED,DELIVEREDdanCANCELLED, masing-masing denganlabel(new,paid, ...), sertacanMoveTo(next): status new dapat berubah menjadi paid atau cancelled, status paid dapat berubah menjadi shipped atau cancelled, status shipped dapat berubah menjadi delivered, dan perubahan lainnya tidak diizinkan. Order(id, item, status)adalah data class dengan status awalNEW.- sealed interface
Outcomememiliki kasusUpdated(order)danRejected(id, reason). Tracker.place(item)membuat pesanan dengan id berikutnya (1, 2, ...) dan mengembalikannya.move(id, target)mengembalikanRejecteddenganno such orderataucannot go from new to delivered, atau menyimpan salinan pesanan yang telah diubah dan mengembalikanUpdated.summary()mengembalikan jumlah pesanan untuk setiap status sesuai urutan enum, dengan mengecualikan status yang jumlahnya nol:paid 1, cancelled 1, atauno orders.describe(outcome)menggunakanwhenyang mencakup semua kemungkinan dan mengembalikan teks pesanan yang diperbarui ataurejected 2: no such order.
Code yang disediakan membaca perintah place tea atau <status> <id>, seperti paid 1, mencetak setiap pesanan yang dibuat, setiap hasil yang dijelaskan, lalu ringkasan.
Tulis kodemu di Status.kt, Order.kt, Outcome.kt, Updated.kt, Rejected.kt, Tracker.kt dan Functions.kt. Main.kt berisi code input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
fun main() {
// Kode input/output yang disediakan: biarkan apa adanya
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())
}
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classKonstruktor utamaBlok init dan validasiKonstruktor sekunderRingkasan: Kartu Perpustakaan2property dan Enkapsulasi
Accessor KustomModifier VisibilitasSetter Privatlazy dan lateinitRingkasan: Rekening Bank5Interface
Mendeklarasikan Interfacemethod DefaultBeberapa InterfaceInterface sebagai TipeUlasan: Metode Pembayaran11Proyek: Pengelolaan Perpustakaan
Buku dan AnggotaPeminjaman BukuLatihan sendiri: Playground Kotlin