Menu
CoddyTech

Rangkuman: Antrean Tugas

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan R di Coddy. Pelajaran 41 dari 57.

challenge icon

Tantangan

Sedang

Buat antrean tugas dari dua Reference Class. Kedua definisi dibungkus dalam suppressMessages().

  • Task di Task.R: field title, priority (numeric), dan done (logical); initialize menetapkan done menjadi FALSE jika tidak diberikan; label() mengembalikan [x] fix (3) untuk tugas yang selesai atau [ ] fix (3).
  • TaskQueue di TaskQueue.R: field tasks (sebuah list); add(title, priority) menambahkan Task baru dan mengembalikan invisible(.self); next_task() mengembalikan judul tugas terbuka dengan prioritas tertinggi (yang ditambahkan lebih awal jika prioritasnya sama), atau nothing; complete(title) menandai tugas terbuka pertama dengan judul tersebut sebagai selesai dan mengembalikan TRUE, atau FALSE; report() mengembalikan satu label untuk setiap tugas sesuai urutan penambahannya, lalu open: 2.

Kode yang disediakan membaca add fix 3, next, dan done fix, lalu menambahkan dua tugas dalam satu pemanggilan berantai dan mencetak laporan.

Tuliskan kodemu di Task.R dan TaskQueue.R. main.R berisi kode input/output yang disediakan dan tidak dapat diedit.

Coba sendiri

source("Task.R")
source("TaskQueue.R")

# Kode input/output yang disediakan: biarkan apa adanya
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())

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler R online