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 PlayerPratique por conta própria: Compilador de Rust online