Repaso - Construir una utilidad
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 57 de 68.
Desafío
FácilCrea un paquete stringutil integral con funciones de manipulación de cadenas y demuestra su uso en un programa principal. Este desafío pondrá a prueba tu capacidad para crear un paquete de utilidad personalizado, implementar funciones exportadas y usar tu paquete desde otro programa.
Recibirás dos entradas:
- Una cadena que contiene especificaciones de funciones en el formato
"function1:description1,function2:description2"(por ejemplo,"Reverse:reverses a string,ToUpper:converts to uppercase,ToLower:converts to lowercase") - Una cadena que contiene cadenas de prueba separadas por tuberías (pipes) en el formato
"string1|string2|string3"(por ejemplo,"hello|Go Programming|WORLD")
Tu tarea es:
- Crear un paquete
stringutildeclarandopackage stringutil - Analizar la primera entrada dividiéndola por comas para obtener las especificaciones de cada función
- Para cada especificación de función, dividir por dos puntos para obtener el nombre de la función y la descripción
- Implementar las siguientes funciones exportadas en tu paquete
stringutil:Reverse(s string) string- devuelve la cadena con los caracteres en orden inversoToUpper(s string) string- devuelve la cadena convertida a mayúsculasToLower(s string) string- devuelve la cadena convertida a minúsculasLength(s string) int- devuelve la longitud de la cadena
- En tu programa principal, importar el paquete
stringutil - Mostrar el encabezado del paquete:
"=== STRINGUTIL PACKAGE DEMONSTRATION ===" - Mostrar las funciones disponibles:
"Available functions in stringutil package:"- Para cada función de la primera entrada:
"- [function_name]: [description]"
- Analizar la segunda entrada dividiéndola por tuberías para obtener las cadenas de prueba individuales
- Mostrar el encabezado de pruebas:
"Testing stringutil functions:" - Para cada cadena de prueba, demostrar todas las funciones:
"Testing with: \"[test_string]\""" stringutil.Reverse: \"[reversed_result]\""" stringutil.ToUpper: \"[uppercase_result]\""" stringutil.ToLower: \"[lowercase_result]\""" stringutil.Length: [length_result]"
- Calcular y mostrar estadísticas:
"=== STATISTICS ===""Total test strings processed: [number_of_test_strings]""Functions available in package: [number_of_functions_from_first_input]""Total function calls made: [total_function_calls]"
- Mostrar la cadena más larga y la más corta:
"Longest string: \"[longest_string]\" (length: [length])""Shortest string: \"[shortest_string]\" (length: [length])"
- Mostrar el mensaje de finalización:
"Package demonstration completed successfully"
Usa el paquete strings para dividir las cadenas de entrada y manipular texto, y el paquete fmt para la salida formateada. Para la función Reverse, necesitarás convertir la cadena en un slice de runas, invertir el orden y volver a convertirla en una cadena. Recuerda que todas las funciones exportadas deben comenzar con letras mayúsculas para ser accesibles desde otros paquetes. Este desafío demuestra cómo crear paquetes de utilidad reutilizables y organizar funcionalidades relacionadas.
Pruébalo tú mismo
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
// TODO: Crea las funciones de tu paquete stringutil aquí
// Dado que no podemos usar archivos separados, define las funciones directamente
// Normalmente estas estarían en un archivo de paquete separado
// func Reverse(s string) string {
// // Convertir a runas, invertir, convertir de nuevo a cadena
// }
// func ToUpper(s string) string {
// // Usar strings.ToUpper
// }
// func ToLower(s string) string {
// // Usar strings.ToLower
// }
// func Length(s string) int {
// // Devolver len(s)
// }
func main() {
// Leer la entrada usando bufio.Scanner para manejar los espacios correctamente
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
functionSpecs := scanner.Text()
scanner.Scan()
testStrings := scanner.Text()
// Analizar las especificaciones de las funciones
funcList := strings.Split(functionSpecs, ",")
// Analizar las cadenas de prueba
testList := strings.Split(testStrings, "|")
// TODO: Escribe tu código a continuación
// 1. Mostrar el encabezado del paquete
// 2. Mostrar las funciones disponibles de funcList (verificar la longitud del array)
// 3. Probar todas las funciones con cada cadena de prueba
// 4. Calcular y mostrar estadísticas
// 5. Buscar y mostrar las cadenas más largas/cortas (verificar si testList tiene elementos)
// 6. Mostrar mensaje de finalización
// Recuerda usar las funciones de tu paquete stringutil como:
// Reverse(testString)
// ToUpper(testString)
// ToLower(testString)
// Length(testString)
}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 comportamientos6Go idiomático: Sets
El modismo de Set en GoCrear un SetAñadir a un SetComprobar pertenenciaEliminar de un SetIterar sobre un SetResumen: Nombres de usuario únicos9Paquetes y Ámbito
¿Qué es un paquete?Exportado vs. No exportadoCrear un paquete simpleAlias de paquetesEl identificador en blanco `_`La función `init`Repaso - Construir una utilidad