Menu
Coddy logo textTech

Recapitulação — Fila de Tarefas

Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 41 de 57.

challenge icon

Desafio

Médio

Construa uma fila de tarefas a partir de duas Classes de Referência. Ambas as definições são envolvidas por suppressMessages().

  • Task em Task.R: os campos title, priority (numérico) e done (lógico); initialize torna done FALSE quando ele não é fornecido; label() retorna [x] fix (3) para uma tarefa concluída ou [ ] fix (3).
  • TaskQueue em TaskQueue.R: o campo tasks (uma list); add(title, priority) acrescenta uma nova Task e retorna invisible(.self); next_task() retorna o título da tarefa aberta com a maior prioridade (a adicionada primeiro em caso de empate) ou nothing; complete(title) marca como concluída a primeira tarefa aberta com esse título e retorna TRUE, ou FALSE; report() retorna um rótulo por tarefa na ordem em que foram adicionadas e, em seguida, open: 2.

O código fornecido lê add fix 3, next e done fix, depois adiciona duas tarefas em uma única chamada encadeada e imprime o relatório.

Seu código deve ficar em Task.R e TaskQueue.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o como está
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())

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de R online