Fácil Rust

Derivando Debug e PartialEq

Enunciado

Crie uma struct Person com os campos name: String e age: u32. Derive Debug e PartialEq para ela. No main, crie duas instâncias, imprima-as com {:?} e compare-as com ==.

Requisitos

  • A struct deve ter os campos name e age.
  • Os traits Debug e PartialEq devem ser derivados.
  • O programa deve imprimir as duas pessoas com {:?} e o resultado da comparação.

Código inicial

// Defina a struct Person e derive Debug e PartialEq

fn main() {
    // Crie duas pessoas e imprima-as
    // Compare-as e imprima o resultado
}

Saída esperada

Person { name: "Alice", age: 30 }
Person { name: "Bob", age: 25 }
São iguais? false
Ver dica

Use #[derive(Debug, PartialEq)] antes da struct. Para imprimir, use println!("{:?}", pessoa).

Mostrar solução
#[derive(Debug, PartialEq)]
struct Person {
    name: String,
    age: u32,
}

fn main() {
    let p1 = Person { name: String::from("Alice"), age: 30 };
    let p2 = Person { name: String::from("Bob"), age: 25 };

    println!("{:?}", p1);
    println!("{:?}", p2);
    println!("São iguais? {}", p1 == p2);
}

Passo a passo

  1. Definimos a struct Person com os campos name (String) e age (u32).
  2. Aplicamos #[derive(Debug, PartialEq)] para gerar automaticamente as implementações de Debug e PartialEq.
  3. No main, criamos duas instâncias com valores diferentes.
  4. Usamos println! com {:?} para imprimir cada pessoa no formato de depuração.
  5. Comparamos p1 == p2 usando o operador de igualdade, que agora funciona graças ao PartialEq derivado.
  6. Imprimimos o resultado booleano da comparação.

Por que funciona

O atributo derive instrui o compilador a gerar código que implementa os traits listados. Para Debug, ele cria uma representação textual da struct; para PartialEq, ele compara campo a campo. Como os campos são String e u32, que já implementam esses traits, a derivação é bem-sucedida.

Erros comuns

  • Esquecer de derivar Debug e tentar usar {:?}: o compilador acusa que Person não implementa Debug. Solução: adicionar #[derive(Debug)].
  • Tentar comparar com == sem derivar PartialEq: erro de compilação. Solução: incluir PartialEq no derive.
  • Usar {} em vez de {:?} para imprimir: Display não foi implementado, então o compilador reclama. Use {:?} ou implemente Display.

Outra forma de resolver

Se quiser comparar apenas por um campo, você pode implementar PartialEq manualmente, mas para a maioria dos casos o derive é suficiente e idiomático.

Saída esperada

Person { name: "Alice", age: 30 }
Person { name: "Bob", age: 25 }
São iguais? false