Menu
Coddy logo textTech

Receptores de valor

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

Cuando defines un método con un receptor de valor, el método opera sobre una copia de la instancia de la estructura en lugar de sobre la original. Esto significa que cualquier cambio realizado en el receptor dentro del método no afectará a la variable de estructura original.

type Counter struct {
    Value int
}

func (c Counter) increment() {
    c.Value++  // Esto modifica la copia, no el original
}

En este ejemplo, el método increment tiene un receptor por valor (c Counter). Cuando llamas a este método en una instancia de Counter, Go crea una copia de la estructura y se la pasa al método. Cualquier modificación de c.Value dentro del método solo afecta a esta copia.

Los receptores por valor son útiles cuando tu método solo necesita leer datos de la estructura sin modificarla. Son seguros de usar porque garantizan que los datos originales permanezcan sin cambios, lo que hace que tu código sea más predecible y evita efectos secundarios no deseados.

challenge icon

Desafío

Fácil

En este desafío, practicarás el trabajo con receptores por valor mediante la creación de un sistema sencillo de monitoreo de temperatura. Crearás una estructura Sensor y definirás métodos que demuestran cómo funcionan los receptores por valor con copias de la estructura.

Recibirás tres entradas:

  • Una cadena que representa el ID del sensor (por ejemplo, "TEMP001")
  • Una cadena que representa la lectura de temperatura actual (por ejemplo, "23.5")
  • Una cadena que representa un valor de ajuste de temperatura (por ejemplo, "2.0")

Tu tarea es:

  1. Definir una estructura Sensor con dos campos: ID (string) y Temperature (float64)
  2. Crear un método llamado displayReading con un receptor por valor que muestre la información del sensor en el formato: "Sensor [ID]: [temperature]°C"
  3. Crear un método llamado adjustTemperature con un receptor por valor que sume el valor de ajuste a la temperatura y muestre: "Adjusted reading: [new_temperature]°C"
  4. Analizar las entradas para crear una instancia de Sensor
  5. Llamar al método displayReading para mostrar la temperatura original
  6. Llamar al método adjustTemperature con el valor de ajuste
  7. Volver a llamar al método displayReading para demostrar que la estructura original permanece sin cambios

Este desafío demostrará que los métodos con receptores por valor trabajan con copias de la estructura, por lo que el valor de temperatura de la estructura original permanecerá sin cambios incluso después de llamar al método adjustTemperature. Los valores de temperatura deben mostrarse con una precisión de un decimal.

Pruébalo tú mismo

package main

import (
    "fmt"
    "strconv"
)

// TODO: Define tu estructura Sensor aquí

// TODO: Define tu método displayReading con receptor de valor aquí

// TODO: Define tu método adjustTemperature con receptor de valor aquí

func main() {
    // Leer entradas
    var sensorID string
    var tempStr string
    var adjustStr string
    
    fmt.Scanln(&sensorID)
    fmt.Scanln(&tempStr)
    fmt.Scanln(&adjustStr)
    
    // Convertir los valores de temperatura y ajuste
    temperature, _ := strconv.ParseFloat(tempStr, 64)
    adjustment, _ := strconv.ParseFloat(adjustStr, 64)
    
    // TODO: Crear una instancia de Sensor y llamar a los métodos requeridos
    
}
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