Menu
Coddy logo textTech

Riepilogo - comportamento degli struct

Fa parte della sezione Logica e flusso del percorso GO di Coddy. Lezione 11 di 68.

challenge icon

Sfida

Facile

In questa sfida, ti eserciterai a implementare sia i receiver di valore sia i receiver puntatore creando un semplice sistema di gestione dei rettangoli. Creerai una struct Rectangle e definirai due diversi tipi di metodi che mostrano quando usare ciascun tipo di receiver.

Riceverai tre input:

  • Una stringa che rappresenta la larghezza del rettangolo (ad es., "5.0")
  • Una stringa che rappresenta l'altezza del rettangolo (ad es., "3.0")
  • Una stringa che rappresenta un fattore di scala (ad es., "2.0")

Il tuo compito è:

  1. Definire una struct Rectangle con due campi: Width (float64) e Height (float64)
  2. Creare un metodo chiamato area con un receiver di valore che calcoli e restituisca l'area del rettangolo (larghezza × altezza)
  3. Creare un metodo chiamato scale con un receiver puntatore che moltiplichi sia la larghezza sia l'altezza per il fattore di scala specificato
  4. Analizzare gli input per creare un'istanza di Rectangle
  5. Stampare l'area iniziale usando il formato: "Initial area: [area]"
  6. Chiamare il metodo scale con il fattore di scala
  7. Stampare l'area dopo la scalatura usando il formato: "Scaled area: [area]"

I valori dell'area dovrebbero essere visualizzati come numeri interi quando sono interi (ad es., 15 invece di 15.0), ma con cifre decimali quando necessario (ad es., 15.5). Questa sfida dimostra il principio fondamentale: usa receiver di valore per i metodi che leggono soltanto i dati (come il calcolo dell'area) e receiver puntatore per i metodi che modificano la struct originale (come la scalatura delle dimensioni).

Provalo tu

package main

import (
	"fmt"
	"strconv"
)

// TODO: Definisci qui la struct Rectangle

// TODO: Implementa qui il metodo area con un ricevitore per valore

// TODO: Implementa qui il metodo scale con un ricevitore per puntatore

func main() {
	// Leggi l'input
	var widthStr string
	var heightStr string
	var scaleStr string
	fmt.Scanln(&widthStr)
	fmt.Scanln(&heightStr)
	fmt.Scanln(&scaleStr)
	
	// Converti gli input in float64
	width, _ := strconv.ParseFloat(widthStr, 64)
	height, _ := strconv.ParseFloat(heightStr, 64)
	scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
	
	// TODO: Crea un'istanza di Rectangle e implementa la soluzione qui sotto
	
	// Stampa l'area iniziale
	// fmt.Printf("Initial area: %.0f\n", initialArea) // Usa questo formato per l'output
	
	// Ridimensiona il rettangolo
	
	// Stampa l'area dopo il ridimensionamento
	// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Usa questo formato per l'output
}

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Go online