Menu
Coddy logo textTech

O que é uma Trait?

Parte da seção Programação Orientada a Objetos do Journey de Rust da Coddy. Lição 29 de 61.

Os genéricos permitem que você escreva código que funcione com qualquer tipo, mas às vezes é necessário garantir que um tipo possa fazer algo específico. É aí que entram as traits.

Um trait define um conjunto de métodos que um tipo deve implementar. Pense nele como um contrato: qualquer tipo que "assina" este contrato promete fornecer o comportamento especificado. Se você já usou interfaces em outras linguagens, os traits têm uma finalidade semelhante.

Veja como você define um trait:

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

A palavra-chave trait introduz o trait, seguida por seu nome. Dentro das chaves, você declara as assinaturas dos métodos — apenas o nome, os parâmetros e o 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 recebe uma referência a si mesmo e retorna uma String." O trait não se importa como o método funciona: isso fica a cargo de cada tipo que o implementa.

As traits se tornam poderosas quando vários 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 exclusiva. A trait garante que todos compartilhem esse recurso 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 uma única assinatura de método: summarize(&self) -> String. Lembre-se: em uma definição de trait, você declara apenas a assinatura do método com um ponto e vírgula: sem corpo. Isso informa ao Rust: "qualquer tipo que implemente esta trait deve fornecer um método summarize que retorna uma String."
  • main.rs: Inclua seu módulo de resumo e imprima uma mensagem confirmando que sua trait está definida. Como ainda não aprendemos a implementar traits (essa é a próxima lição!), você simplesmente verificará se sua trait compila corretamente.

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

Summarizable trait defined successfully!

Este desafio se concentra exclusivamente na sintaxe de definição de traits: 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á a fazer com que structs implementem esta trait!

Experimente você mesmo

mod summary;

fn main() {
    // TODO: Imprima a mensagem de confirmação de que o trait está definido
    // Expected output: "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 Programação Orientada a Objetos

Pratique por conta própria: Compilador de Rust online