Añadir una tarea
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 21 de 68.
Desafío
FácilBasándote en tu base de gestión de tareas, ahora implementarás la funcionalidad principal para añadir nuevas tareas a tu sistema. Este desafío se centra en crear una función que amplíe tu lista de tareas añadiendo nuevas tareas al slice existente.
Nota importante: Dado que los nombres de las tareas pueden contener espacios (como "Buy groceries"), necesitarás usar bufio.Scanner para leer líneas completas de entrada. La función fmt.Scanln deja de leer en el primer espacio, lo que rompería los nombres de tareas con espacios. Usa bufio.NewScanner(os.Stdin) y llama a scanner.Scan() seguido de scanner.Text() para leer líneas completas.
Recibirás dos entradas:
- Una cadena que representa el número de tareas existentes (por ejemplo,
"2") - Una cadena que contiene nombres de tareas separados por comas (por ejemplo,
"Buy groceries,Call dentist,Finish project")
Tu tarea es:
- Definir el mismo struct
Taskdel desafío anterior con los camposName(string) yCompleted(bool) - Crear una función llamada
addTaskque reciba un slice de structsTasky un nombre de tarea (string) como parámetros - La función
addTaskdebe devolver un nuevo slice con la tarea añadida (la nueva tarea debe tenerCompletedestablecido enfalse) - Usar
bufio.Scannerpara leer las líneas de entrada correctamente y así manejar nombres de tareas con espacios - Crear un slice inicial de tareas basado en el número de tareas existentes especificado en la primera entrada:
- Si el número es
"0", comienza con un slice vacío - Si el número es mayor que
"0", crea esa cantidad de tareas de marcador de posición con nombres como"Existing Task 1","Existing Task 2", etc., todas marcadas como incompletas
- Si el número es
- Analizar los nombres de tareas separados por comas de la segunda entrada
- Usar tu función
addTaskpara añadir cada nueva tarea al slice - Imprimir cada tarea del slice final en el formato:
"Task: [name], Completed: [true/false]" - Imprimir el número total de tareas en el formato:
"Total tasks: [count]"
Por ejemplo, si tienes 1 tarea existente y quieres añadir "Buy groceries,Call dentist", tu salida debería mostrar primero la tarea existente, seguida de las dos nuevas tareas y, finalmente, el recuento total. Este desafío practica la manipulación de slices con la función append y demuestra cómo construir una funcionalidad que extiende tus estructuras de datos.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
// TODO: Crear la función addTask aquí
func main() {
// Crear un escáner para leer líneas de entrada
scanner := bufio.NewScanner(os.Stdin)
// Leer el número de tareas existentes
scanner.Scan()
existingTasksStr := scanner.Text()
// Leer los nombres de las tareas
scanner.Scan()
taskNamesStr := scanner.Text()
// TODO: Completar la implementación
// 1. Convertir existingTasksStr a entero
// 2. Crear el slice inicial con las tareas existentes
// 3. Analizar taskNamesStr y añadir nuevas tareas
// 4. Imprimir todas las tareas y el recuento total
}Todas las lecciones de Lógica y Flujo
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientos