Adicionando uma Tarefa
Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 21 de 68.
Desafio
FácilCom base na fundação do seu sistema de gerenciamento de tarefas, agora você implementará a funcionalidade principal para adicionar novas tarefas ao sistema. Este desafio se concentra na criação de uma função que amplia sua lista de tarefas adicionando novas tarefas à fatia existente.
Observação importante: Como os nomes das tarefas podem conter espaços (como "Buy groceries"), você precisará usar bufio.Scanner para ler linhas completas da entrada. A função fmt.Scanln para de ler no primeiro espaço, o que interromperia a leitura de nomes de tarefas com espaços. Use bufio.NewScanner(os.Stdin) e chame scanner.Scan(), seguido de scanner.Text(), para ler linhas completas.
Você receberá duas entradas:
- Uma string que representa o número de tarefas existentes (por exemplo,
"2") - Uma string contendo nomes de tarefas separados por vírgulas (por exemplo,
"Buy groceries,Call dentist,Finish project")
Sua tarefa é:
- Definir a mesma struct
Taskdo desafio anterior, com os camposName(string) eCompleted(bool) - Criar uma função chamada
addTaskque receba uma fatia de structsTaske um nome de tarefa (string) como parâmetros - A função
addTaskdeve retornar uma nova fatia com a tarefa adicionada (a nova tarefa deve terCompleteddefinido comofalse) - Usar
bufio.Scannerpara ler corretamente as linhas de entrada e lidar com nomes de tarefas que contenham espaços - Criar uma fatia inicial de tarefas com base no número de tarefas existentes especificado na primeira entrada:
- Se o número for
"0", começar com uma fatia vazia - Se o número for maior que
"0", criar essa quantidade de tarefas de preenchimento com nomes como"Existing Task 1","Existing Task 2", etc., todas marcadas como incompletas
- Se o número for
- Analisar os nomes de tarefas separados por vírgulas da segunda entrada
- Usar sua função
addTaskpara adicionar cada nova tarefa à fatia - Imprimir cada tarefa da fatia final no formato:
"Task: [name], Completed: [true/false]" - Imprimir o número total de tarefas no formato:
"Total tasks: [count]"
Por exemplo, se você tiver 1 tarefa existente e quiser adicionar "Buy groceries,Call dentist", sua saída deverá mostrar primeiro a tarefa existente, seguida pelas duas novas tarefas e, por fim, a contagem total. Este desafio pratica a manipulação de fatias com a função append e demonstra como criar uma funcionalidade que amplia suas estruturas de dados.
Experimente você mesmo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Criar a função addTask aqui
func main() {
// Criar scanner para ler as linhas de entrada
scanner := bufio.NewScanner(os.Stdin)
// Ler o número de tarefas existentes
scanner.Scan()
existingTasksStr := scanner.Text()
// Ler os nomes das tarefas
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: Completar a implementação
// 1. Converter existingTasksStr para inteiro
// 2. Criar o slice inicial com as tarefas existentes
// 3. Analisar taskNamesStr e adicionar novas tarefas
// 4. Imprimir todas as tarefas e a contagem total
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e ComportamentosPratique por conta própria: Compilador de Go online