Este código é um gerenciador de tarefas simples que permite ao usuário adicionar, listar, marcar como concluídas e excluir tarefas. Ele também mantém um arquivo de texto persistente (tasks.txt) para salvar e carregar as tarefas.
- Linguagem: O código foi escrito em Ruby
O código é dividido em duas classes principais (Task e TaskManager), além de uma função que gerencia a interação com o usuário. Vamos analisar cada parte:
A classe Task representa uma tarefa individual e tem dois atributos principais:
description: a descrição da tarefa.completed: um valor booleano (true ou false) que indica se a tarefa foi concluída.
Métodos:
-
initialize(description, completed = false): O construtor inicializa a descrição da tarefa e define o status como não concluída (padrão éfalse). -
mark_completed: Este método altera o status da tarefa para concluída, definindo o atributo@completedcomotrue. -
to_s: Este método sobrescreve o métodoto_sde Ruby, permitindo representar a tarefa como umastring. Ele exibe a descrição da tarefa e seu status, se está "Concluída" ou "Pendente", dependendo do valor de@completed.
A classe TaskManager gerencia uma lista de tarefas e também interage com um arquivo de texto para salvar e carregar as tarefas.
Atributos:
@file_name: O nome do arquivo onde as tarefas são salvas (por padrão,"tasks.txt").@tasks: Uma lista (array) que contém os objetosTask.
Métodos:
-
initialize(file_name = "tasks.txt"): O construtor recebe o nome do arquivo (com valor padrão"tasks.txt") e chama o métodoload_taskspara carregar as tarefas do arquivo. -
add_task(description): Este método cria uma nova tarefa com a descrição fornecida, adiciona à lista de tarefas e então salva as tarefas no arquivo de texto. -
list_tasks: Exibe todas as tarefas salvas. Se não houver tarefas, ele informa que não há tarefas. -
mark_task_completed(index): Este método recebe um índice de tarefa, marca a tarefa correspondente como concluída, e então atualiza o arquivo de tarefas. -
delete_task(index): Exclui a tarefa no índice especificado e depois atualiza o arquivo de tarefas.
Métodos Privados:
-
load_tasks: Este método carrega as tarefas do arquivo especificado. Ele lê cada linha do arquivo e cria um objetoTaskpara cada linha. A linha é dividida em dois valores (descrição e status de conclusão) usando o separador|. -
save_tasks: Este método salva todas as tarefas no arquivo de texto. Cada tarefa é salva em uma linha, com a descrição e o status da tarefa separados por |.
Esta função é responsável por interagir com o usuário. Ela cria uma instância de TaskManager e exibe um menu para que o usuário escolha as ações que deseja realizar. O loop continua até que o usuário escolha sair.
Opções do Menu:
- Adicionar Tarefa: Solicita uma descrição e adiciona uma nova tarefa.
- Listar Tarefas: Exibe todas as tarefas atuais.
- Marcar Tarefa como Concluída: Solicita o número da tarefa e a marca como concluída.
- Excluir Tarefa: Solicita o número da tarefa e a exclui.
- Sair: Finaliza o programa.
Fluxo de Execução:
- O usuário pode interagir com o programa através do terminal. Quando o programa é iniciado, ele apresenta o menu.
- Dependendo da escolha do usuário, o programa executa a ação correspondente: adicionar, listar, concluir, excluir tarefas ou sair.
- A lista de tarefas é salva no arquivo de texto a cada modificação, o que garante persistência de dados entre execuções do programa.
- Sintaxe simples e expressiva: Ruby é uma linguagem de fácil leitura e escrita, o que permite a criação rápida de protótipos como este.
- Orientação a objetos: O código utiliza classes e objetos (
TaskeTaskManager), que são os pilares da orientação a objetos em Ruby. - Métodos de instância e variáveis de instância: O uso de métodos como
initialize,to_s, e o acesso a variáveis de instância (@description,@completed) é típico em Ruby. - Manipulação de arquivos: O código usa métodos de leitura e escrita de arquivos (
File.readlineseFile.open) para carregar e salvar as tarefas.
- Adicionar tarefa: Cria uma nova tarefa e a salva no arquivo.
- Listar tarefas: Exibe todas as tarefas com seu status atual.
- Marcar tarefa como concluída: Altera o status de uma tarefa específica para "concluída" e salva.
- Excluir tarefa: Remove uma tarefa da lista e salva as mudanças.
- Persistência em arquivo: As tarefas são salvas em um arquivo de texto para persistência de dados entre execuções do programa.