Ver todas las tareas
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 22 de 68.
Desafío
FácilContinuando con tu sistema de gestión de tareas, ahora implementarás la funcionalidad para mostrar todas las tareas en un formato fácil de usar. Este desafío se centra en iterar a través de tu colección de tareas y presentar cada tarea con su estado de finalización utilizando indicadores visuales claros.
Recibirás dos entradas:
- Una cadena que representa el número de tareas (por ejemplo,
"4") - Una cadena que contiene los datos de las tareas en el formato:
"name1:status1,name2:status2,name3:status3"donde el estado es"true"o"false"(por ejemplo,"Buy groceries:false,Call dentist:true,Finish project:false,Review code:true")
Tu tarea es:
- Definir la misma estructura
Taskde desafíos anteriores con los camposName(string) yCompleted(bool) - Crear una función llamada
viewAllTasksque reciba un slice de estructurasTaskcomo parámetro - Dentro de la función
viewAllTasks, iterar a través del slice e imprimir cada tarea con el siguiente formato:- Para tareas completadas:
"[x] [task_name]" - Para tareas incompletas:
"[ ] [task_name]"
- Para tareas completadas:
- Analizar los datos de las tareas de la segunda entrada para crear tu slice de tareas:
- Dividir la entrada por comas para obtener las entradas de tareas individuales
- Para cada entrada, dividir por dos puntos para separar el nombre y el estado
- Convertir la cadena de estado a un booleano (
"true"se convierte entrue,"false"se convierte enfalse)
- Llamar a tu función
viewAllTaskscon el slice creado - Después de mostrar todas las tareas, imprimir un resumen en el formato:
"Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
Por ejemplo, si tienes las tareas "Buy groceries:false,Call dentist:true,Finish project:false", tu salida debería mostrar cada tarea con las casillas de verificación correspondientes y luego mostrar el resumen con el recuento total y las estadísticas de finalización. Este desafío practica la iteración de slices, el formateo condicional con sentencias if y proporciona a los usuarios una visión clara del progreso de sus tareas.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
type Task struct {
Name string
Completed bool
}
func viewAllTasks(tasks []Task) {
// TODO: Implementar la función para mostrar todas las tareas
// Para tareas completadas: "[x] [task_name]"
// Para tareas incompletas: "[ ] [task_name]"
}
func main() {
var numTasksStr string
fmt.Scanln(&numTasksStr)
numTasks, _ := strconv.Atoi(numTasksStr)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
taskData := scanner.Text()
var tasks []Task
// TODO: Analizar los datos de las tareas desde la cadena taskData
// Dividir por comas para obtener las entradas de tareas individuales
taskEntries := strings.Split(taskData, ",")
_ = taskEntries
// Para cada entrada, dividir por dos puntos para separar el nombre y el estado
// Convertir la cadena de estado a booleano y crear estructuras Task
// TODO: Llamar a la función viewAllTasks con la rebanada (slice) creada
// TODO: Calcular e imprimir el resumen
// Formato: "Total: [total_count] tasks ([completed_count] completed, [incomplete_count] remaining)"
_ = tasks
_ = numTasks
}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