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ácilSobre la base de los fundamentos 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"), tendrás que 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 consiste en:
- Definir la misma estructura
Taskdel desafío anterior, con los camposName(string) yCompleted(bool) - Crear una función llamada
addTaskque reciba como parámetros un slice de estructurasTasky un nombre de tarea (string) - La función
addTaskdebe devolver un nuevo slice con la tarea añadida (la nueva tarea debe tenerCompletedestablecido enfalse) - Usar
bufio.Scannerpara leer correctamente las líneas de entrada y gestionar nombres de tareas con espacios - Crear un slice inicial de tareas basándote 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 tarea nueva al slice - Imprimir cada tarea del slice final con el formato:
"Task: [name], Completed: [true/false]" - Imprimir el número total de tareas con 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 tareas nuevas y, finalmente, el número total. Este desafío practica la manipulación de slices con la función append y demuestra cómo crear una funcionalidad que amplía 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 comportamientosPractica por tu cuenta: Compilador de Go online