Resumen - Comportamiento de estructuras
Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 11 de 68.
Desafío
FácilEn este desafío, practicarás la implementación de receptores de valor y de puntero creando un sistema simple de gestión de rectángulos. Crearás una estructura Rectangle y definirás dos tipos diferentes de métodos que demuestran cuándo usar cada tipo de receptor.
Recibirás tres entradas:
- Una cadena que representa el ancho del rectángulo (por ejemplo,
"5.0") - Una cadena que representa la altura del rectángulo (por ejemplo,
"3.0") - Una cadena que representa un factor de escala (por ejemplo,
"2.0")
Tu tarea es:
- Definir una estructura
Rectanglecon dos campos:Width(float64) yHeight(float64) - Crear un método llamado
areacon un receptor de valor que calcule y devuelva el área del rectángulo (ancho × altura) - Crear un método llamado
scalecon un receptor de puntero que multiplique tanto el ancho como la altura por el factor de escala dado - Analizar las entradas para crear una instancia de
Rectangle - Imprimir el área inicial usando el formato:
"Initial area: [area]" - Llamar al método
scalecon el factor de escala - Imprimir el área escalada usando el formato:
"Scaled area: [area]"
Los valores del área deben mostrarse como números enteros cuando lo sean (por ejemplo, 15 en lugar de 15.0), pero con decimales cuando sea necesario (por ejemplo, 15.5). Este desafío demuestra el principio clave: usar receptores de valor para métodos que solo leen datos (como calcular el área) y receptores de puntero para métodos que modifican la estructura original (como escalar las dimensiones).
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
)
// TODO: Define tu estructura Rectangle aquí
// TODO: Implementa el método area con receptor de valor aquí
// TODO: Implementa el método scale con receptor de puntero aquí
func main() {
// Leer entrada
var widthStr string
var heightStr string
var scaleStr string
fmt.Scanln(&widthStr)
fmt.Scanln(&heightStr)
fmt.Scanln(&scaleStr)
// Convertir entradas a float64
width, _ := strconv.ParseFloat(widthStr, 64)
height, _ := strconv.ParseFloat(heightStr, 64)
scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
// TODO: Crea una instancia de Rectangle e implementa la solución a continuación
// Imprimir área inicial
// fmt.Printf("Initial area: %.0f\n", initialArea) // Usa este formato para la salida
// Escalar el rectángulo
// Imprimir área escalada
// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Usa este formato para la salida
}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