Menu
Coddy logo textTech

Crear un paquete simple

Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 53 de 68.

¡Ahora es el momento de crear tu propio paquete personalizado! Crear paquetes te permite organizar tu código en módulos reutilizables que se pueden importar y usar en diferentes programas.

Para crear un paquete, comienzas declarándolo en la parte superior de tu archivo con la palabra clave package, seguida del nombre del paquete. Para nuestro paquete de calculadora, usaremos:

package calculator

Dentro de este paquete, puedes definir funciones, variables y tipos. Recuerda que solo los identificadores exportados (los que comienzan con una letra mayúscula) estarán disponibles desde otros paquetes. Así es como podrías definir una función Add exportada:

package calculator

func Add(a, b int) int {
    return a + b
}

Para usar tu paquete personalizado desde otro archivo, lo importas igual que cualquier otro paquete. Desde tu paquete main, después puedes llamar a las funciones exportadas:

package main

import "calculator"

func main() {
    result := calculator.Add(5, 3)
}

Este enfoque modular hace que tu código esté más organizado y te permite reutilizar la funcionalidad en varios programas sin duplicar código.

challenge icon

Desafío

Fácil

Crea un paquete personalizado mathutils con operaciones matemáticas básicas y después úsalo desde tu programa principal. Este desafío pondrá a prueba tu capacidad para crear un paquete, definir funciones exportadas e importar tu paquete personalizado para usarlo en otro programa.

Recibirás dos entradas:

  • Una cadena que contiene definiciones de funciones con el formato "function1:param1,param2:operation|function2:param1,param2:operation" (por ejemplo, "Add:5,3:addition|Multiply:4,7:multiplication|Subtract:10,4:subtraction")
  • Una cadena que contiene solicitudes de cálculo con el formato "operation1:value1,value2|operation2:value1,value2|operation3:value1,value2" (por ejemplo, "Add:15,25|Multiply:6,8|Subtract:50,20")

Tu tarea es:

  1. Crea un paquete mathutils declarando package mathutils en la parte superior
  2. Analiza la primera entrada dividiéndola por tuberías (|) para obtener las definiciones de funciones individuales
  3. Para cada definición de función, divídela por dos puntos para obtener el nombre de la función, los parámetros y el tipo de operación
  4. Crea las siguientes funciones exportadas en tu paquete mathutils:
    • Add(a, b int) int: devuelve la suma de a y b
    • Subtract(a, b int) int: devuelve a menos b
    • Multiply(a, b int) int: devuelve el producto de a y b
    • Divide(a, b int) int: devuelve a dividido por b (división entera)
  5. En tu programa principal, importa el paquete mathutils
  6. Muestra el encabezado de información del paquete: "=== MATHUTILS PACKAGE DEMO ==="
  7. Analiza la primera entrada y muestra las funciones disponibles:
    • "Available functions in mathutils package:"
    • Para cada función: "- [function_name]: Performs [operation_type] on two integers"
  8. Analiza la segunda entrada dividiéndola por tuberías para obtener las solicitudes de cálculo individuales
  9. Para cada solicitud de cálculo, divídela por dos puntos para obtener el nombre de la función y los parámetros
  10. Divide los parámetros por comas para obtener los dos valores enteros
  11. Convierte las cadenas de parámetros en enteros usando strconv.Atoi
  12. Muestra el encabezado del proceso de cálculo: "Performing calculations:"
  13. Para cada solicitud de cálculo:
    • Llama a la función correspondiente del paquete mathutils
    • Muestra: "mathutils.[function_name]([param1], [param2]) = [result]"
  14. Calcula y muestra las estadísticas resumidas:
    • "Calculation Summary:"
    • "Total calculations performed: [number_of_calculations]"
    • "Functions used: [comma_separated_list_of_unique_function_names_used]"
    • "Sum of all results: [sum_of_all_calculation_results]"
  15. Muestra la confirmación del uso del paquete:
    • "Package demonstration completed successfully"
    • "All functions from mathutils package executed correctly"

Usa el paquete strings para dividir las cadenas de entrada, el paquete strconv para convertir cadenas en enteros y el paquete fmt para la salida con formato. Recuerda que solo se exportarán y serán accesibles desde otros paquetes las funciones que comienzan con letras mayúsculas.

Importante: Ambas líneas de entrada usan tuberías (|) como delimitador entre las entradas. Cada entrada de la primera línea tiene el formato FunctionName:param1,param2:operationtype: divide primero por | y después divide cada entrada por : para extraer el nombre de la función (índice 0) y el tipo de operación (índice 2).

Este desafío demuestra cómo crear código reutilizable mediante paquetes personalizados y cómo organizar la funcionalidad en módulos lógicos.

Pruébalo tú mismo

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// TODO: Create your mathutils package functions here
// Como no podemos usar archivos separados, define las funciones directamente
// Estas normalmente estarían en un archivo de paquete separado

func main() {
	// Lee la entrada usando bufio.Scanner para manejar los espacios correctamente
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	functionDefs := scanner.Text()

	scanner.Scan()
	calcRequests := scanner.Text()

	// TODO: Escribe tu código debajo
	// 1. Define Add, Subtract, Multiply, Divide functions (simulating mathutils package)
	// 2. Analiza functionDefs: divide por '|' para obtener cada definición, luego divide cada una por ':'
	//    Formato: FuncName:param1,param2:operation  (p. ej. "Add:5,3:addition")
	// 3. Display package information and available functions
	// 4. Parse calcRequests (split by '|'), perform calculations
	// 5. Muestra los resultados y las estadísticas de resumen

	// Suprime las advertencias de variables no usadas
	_ = functionDefs
	_ = calcRequests
	_ = fmt.Sprintf
	_ = strconv.Atoi
	_ = strings.Split

	// Recuerda generar el formato requerido según se especifica en el desafío
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Go online