Recapitulação - Ponto Imprimível
Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 39 de 61.
Desafio
FácilVamos reunir todas as traits padrão que você aprendeu criando uma struct Point completa que pode ser depurada, exibida de forma elegante e comparada para igualdade!
Você organizará seu código em dois arquivos:
point.rs: Defina uma structPointpública com camposxeypúblicos (ambosi32). Seu Point deve suportar três capacidades:- Impressão de depuração (Debug) com
{:?}— derive isso automaticamente - Exibição amigável ao usuário com
{}no formato(x, y)— implemente isso manualmente usandostd::fmt::Display - Comparação de igualdade com
==— derivePartialEq
- Impressão de depuração (Debug) com
main.rs: Importe seu módulo point e crie duas instâncias dePointusando as entradas fornecidas. Demonstre as três capacidades imprimindo o primeiro ponto com o formato de depuração, imprimindo o segundo ponto com o formato de exibição e comparando se os dois pontos são iguais.
Sua saída deve mostrar todas as três capacidades das traits em ação:
Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}Por exemplo, com as entradas 3, 5, 3, 5:
Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: trueE com as entradas 10, 20, 5, 15:
Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: falseVocê receberá quatro entradas: as coordenadas x e y para o primeiro ponto, seguidas pelas coordenadas x e y para o segundo ponto. Analise cada uma como i32.
Experimente você mesmo
mod point;
use point::Point;
fn main() {
// Leia quatro entradas: x1, y1, x2, y2
let mut input = String::new();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y1: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let x2: i32 = input.trim().parse().expect("Invalid input");
input.clear();
std::io::stdin().read_line(&mut input).expect("Failed to read line");
let y2: i32 = input.trim().parse().expect("Invalid input");
// TODO: Crie duas instâncias de Point usando as entradas
// TODO: Imprima o primeiro ponto usando o formato debug {:?}
// Formato: "Debug: Point { x: ..., y: ... }"
// TODO: Imprima o segundo ponto usando o formato display {}
// Formato: "Display: (..., ...)"
// TODO: Compare os dois pontos e imprima o resultado
// Formato: "Equal: true" ou "Equal: false"
}
Todas as lições de Object Oriented Programming
1Métodos e Comportamento
Introdução a Blocos de ImplementaçãoO Parâmetro SelfMétodos MutáveisFunções AssociadasMúltiplos Blocos de ImplementaçãoEncadeamento de MétodosRecapitulação - Ações de Retângulo4Projeto: Pet Virtual
Definindo o PetAlimentando o Pet7Traits Padrão
A Trait DebugA Trait DisplayClone e CopyTraits de IgualdadeRecapitulação - Ponto Imprimível10Projeto: Sistema de Documentos
A Trait DrawComponente de Texto2Encapsulamento e Módulos
Fundamentos de MódulosA Palavra-chave PublicCampos PrivadosGettersSettersRecapitulação - Cofre Seguro5Genéricos
Structs GenéricasMétodos GenéricosMúltiplos Tipos GenéricosFunções GenéricasRecapitulação - Ponto de Coordenada8Traits como Restrições
Sintaxe de Restrições de TraitRestrições MúltiplasA Cláusula WhereRetornando Tipos com TraitsRecapitulação - Impressora Genérica11Padrões de Projeto em Rust
Padrão NewtypeComposiçãoA Trait DropFrom e IntoRecapitulação - Mock de Smart Pointer3Enums Avançados
Enums com DadosMétodos em EnumsCorrespondência de Variantes de DadosO Enum Option RevisitadoRecapitulação - Enum Shape6Definição de Traits
O que é uma Trait?Implementando TraitsImplementações PadrãoSobrescrevendo PadrõesTraits com ParâmetrosRecapitulação - Media Player