Recapitulação - Comportamento de Structs
Parte da seção Lógica & Fluxo do Journey de GO da Coddy. Lição 11 de 68.
Desafio
FácilNeste desafio, você praticará a implementação de receptores por valor e por ponteiro criando um sistema simples de gerenciamento de retângulos. Você criará uma struct Rectangle e definirá dois tipos diferentes de métodos que demonstram quando usar cada tipo de receptor.
Você receberá três entradas:
- Uma string representando a largura do retângulo (por exemplo,
"5.0") - Uma string representando a altura do retângulo (por exemplo,
"3.0") - Uma string representando um fator de escala (por exemplo,
"2.0")
Sua tarefa é:
- Definir uma struct
Rectanglecom dois campos:Width(float64) eHeight(float64) - Criar um método chamado
areacom um receptor por valor que calcula e retorna a área do retângulo (largura × altura) - Criar um método chamado
scalecom um receptor por ponteiro que multiplica a largura e a altura pelo fator de escala fornecido - Analisar as entradas para criar uma instância de
Rectangle - Imprimir a área inicial usando o formato:
"Initial area: [area]" - Chamar o método
scalecom o fator de escala - Imprimir a área escalada usando o formato:
"Scaled area: [area]"
Os valores da área devem ser exibidos como números inteiros quando forem inteiros (por exemplo, 15 em vez de 15.0), mas com casas decimais quando necessário (por exemplo, 15.5). Este desafio demonstra o princípio fundamental: use receptores por valor para métodos que apenas leem dados (como calcular a área) e receptores por ponteiro para métodos que modificam a struct original (como ajustar as dimensões).
FORMATO DE SAÍDA OBRIGATÓRIO:
Experimente você mesmo
package main
import (
"fmt"
"strconv"
)
// TODO: Defina sua struct Rectangle aqui
// TODO: Implemente o método area com receptor de valor aqui
// TODO: Implemente o método scale com receptor de ponteiro aqui
func main() {
// Ler entrada
var widthStr string
var heightStr string
var scaleStr string
fmt.Scanln(&widthStr)
fmt.Scanln(&heightStr)
fmt.Scanln(&scaleStr)
// Converter entradas para float64
width, _ := strconv.ParseFloat(widthStr, 64)
height, _ := strconv.ParseFloat(heightStr, 64)
scaleFactor, _ := strconv.ParseFloat(scaleStr, 64)
// TODO: Criar instância de Rectangle e implementar a solução abaixo
// Imprimir área inicial
// fmt.Printf("Initial area: %.0f\n", initialArea) // Use este formato para a saída
// Escalar o retângulo
// Imprimir área escalada
// fmt.Printf("Scaled area: %.0f\n", scaledArea) // Use este formato para a saída
}Todas as lições de Lógica & Fluxo
1Fluxo de Controle Avançado
Switch com `fallthrough`Interrompendo Loops AninhadosContinuando um Loop EspecíficoA Instrução `goto`Recapitulação - Controle de Loop Avançado4Projeto: Lista de Tarefas Simples
Configuração do ProjetoAdicionando uma Tarefa2Structs e Métodos
Definindo Métodos em StructsRecebedores de ValorRecebedores de PonteiroEscolhendo RecebedoresMétodos vs FunçõesRecapitulação - Comportamento de Structs5Mapas em Profundidade
Mapas de StructsPonteiros como Valores de MapVerificando Mapas NilComparando MapasRecapitulação - Contador de Frequência de Palavras3Interfaces (O Básico)
O que é uma Interface?Definindo uma InterfaceImplementando uma InterfaceUsando Tipos de InterfaceInterface VaziaAsserções de TipoType SwitchRecapitulação - Formas e ComportamentosPratique por conta própria: Compilador de Go online