Menu
Coddy logo textTech

O que é uma Trait?

Parte da seção Object Oriented Programming do Journey de Rust da Coddy — lição 29 de 61.

Genéricos permitem que você escreva código que funciona com qualquer tipo, mas às vezes você precisa garantir que um tipo possa fazer algo específico. É aqui que as traits entram.

Uma trait define um conjunto de métodos que um tipo deve implementar. Pense nisso como um contrato — qualquer tipo que "assine" este contrato promete fornecer o comportamento especificado. Se você já usou interfaces em outras linguagens, as traits servem a um propósito semelhante.

Veja como você define uma trait:

trait Describable {
    fn describe(&self) -> String;
}

A palavra-chave trait introduz a trait, seguida pelo seu nome. Dentro das chaves, você declara as assinaturas dos métodos — apenas o nome, parâmetros e tipo de retorno, sem corpo. O ponto e vírgula após a assinatura indica que isso é um requisito, não uma implementação.

Este trait Describable diz: "Qualquer tipo que me implemente deve fornecer um método describe que receba uma referência a si mesmo e retorne uma String." O trait não se importa como o método funciona — isso depende de cada tipo que o implementa.

Traits tornam-se poderosas quando múltiplos tipos diferentes implementam a mesma trait. Um Book, um Car e uma Person poderiam todos ser Describable, cada um fornecendo sua própria descrição única. A trait garante que todos eles compartilhem essa capacidade comum.

challenge icon

Desafio

Fácil

Vamos definir sua primeira trait! Uma trait estabelece um contrato — uma promessa de que qualquer tipo que a implemente fornecerá um comportamento específico. Você criará uma trait Summarizable que diferentes tipos podem implementar para fornecer um resumo de si mesmos.

Você organizará seu código em dois arquivos:

  • summary.rs: Defina uma trait pública chamada Summarizable com a assinatura de um único método: summarize(&self) -> String. Lembre-se, em uma definição de trait você apenas declara a assinatura do método com um ponto e vírgula — sem corpo. Isso diz ao Rust "qualquer tipo que implementar esta trait deve fornecer um método summarize que retorna uma String."
  • main.rs: Importe seu módulo summary e imprima uma mensagem confirmando que sua trait foi definida. Como ainda não aprendemos como implementar traits (essa é a próxima lição!), você simplesmente verificará se sua trait compila corretamente.

No seu arquivo principal, imprima a seguinte mensagem para confirmar que a definição da sua trait é válida:

Summarizable trait defined successfully!

Este desafio foca puramente na sintaxe de definição de trait — a palavra-chave trait, o nome da trait e a declaração de assinaturas de métodos sem implementações. Na próxima lição, você aprenderá como fazer structs implementarem esta trait!

Experimente você mesmo

mod summary;

fn main() {
    // TODO: Imprima a mensagem de confirmação de que a trait está definida
    // Saída esperada: "Summarizable trait defined successfully!"
    
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Object Oriented Programming