Menu
Coddy logo textTech

¿Qué es un Trait?

Parte de la sección Object Oriented Programming del Journey de Rust de Coddy — lección 29 de 61.

Los genéricos te permiten escribir código que funciona con cualquier tipo, pero a veces necesitas garantizar que un tipo pueda hacer algo específico. Aquí es donde entran en juego los traits.

Un trait define un conjunto de métodos que un tipo debe implementar. Piénsalo como un contrato: cualquier tipo que "firme" este contrato promete proporcionar el comportamiento especificado. Si has utilizado interfaces en otros lenguajes, los traits cumplen un propósito similar.

Así es como se define un trait:

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

La palabra clave trait introduce el trait, seguido de su nombre. Dentro de las llaves, declaras las firmas de los métodos: solo el nombre, los parámetros y el tipo de retorno, sin cuerpo. El punto y coma después de la firma indica que esto es un requisito, no una implementación.

Este trait Describable dice: "Cualquier tipo que me implemente debe proporcionar un método describe que tome una referencia a sí mismo y devuelva un String". Al trait no le importa cómo funciona el método; eso depende de cada tipo que lo implemente.

Los traits se vuelven poderosos cuando múltiples tipos diferentes implementan el mismo trait. Un Book, un Car y una Person podrían ser todos Describable, cada uno proporcionando su propia descripción única. El trait garantiza que todos compartan esta capacidad común.

challenge icon

Desafío

Fácil

¡Vamos a definir tu primer trait! Un trait establece un contrato: una promesa de que cualquier tipo que lo implemente proporcionará un comportamiento específico. Crearás un trait Summarizable que diferentes tipos pueden implementar para proporcionar un resumen de sí mismos.

Organizarás tu código en dos archivos:

  • summary.rs: Define un trait público llamado Summarizable con una única firma de método: summarize(&self) -> String. Recuerda, en la definición de un trait solo declaras la firma del método con un punto y coma, sin cuerpo. Esto le dice a Rust "cualquier tipo que implemente este trait debe proporcionar un método summarize que devuelva un String".
  • main.rs: Incorpora tu módulo summary e imprime un mensaje confirmando que tu trait está definido. Dado que aún no hemos aprendido cómo implementar traits (¡esa es la próxima lección!), simplemente verificarás que tu trait se compila correctamente.

En tu archivo principal, imprime el siguiente mensaje para confirmar que la definición de tu trait es válida:

Summarizable trait defined successfully!

Este desafío se centra puramente en la sintaxis de definición de traits: la palabra clave trait, el nombre del trait y la declaración de firmas de métodos sin implementaciones. ¡En la próxima lección, aprenderás cómo hacer que los structs implementen este trait!

Hoja de referencia

Un trait define un conjunto de métodos que un tipo debe implementar. Actúa como un contrato que garantiza que un tipo proporciona un comportamiento específico.

Para definir un trait, usa la palabra clave trait seguida del nombre del trait y las firmas de los métodos:

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

Las firmas de los métodos en los traits incluyen el nombre, los parámetros y el tipo de retorno, pero no el cuerpo. El punto y coma indica que esto es un requisito para los tipos que lo implementan.

Múltiples tipos diferentes pueden implementar el mismo trait, cada uno proporcionando su propia implementación de los métodos requeridos.

Pruébalo tú mismo

mod summary;

fn main() {
    // TODO: Imprime el mensaje de confirmación de que el trait está definido
    // Salida esperada: "Summarizable trait defined successfully!"
    
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming