Menu
Coddy logo textTech

¿Qué es un Trait?

Parte de la sección Programación Orientada a Objetos 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 los traits.

Un trait define un conjunto de métodos que un tipo debe implementar. Piensa en ello como un contrato: cualquier tipo que "firme" este contrato se compromete a proporcionar el comportamiento especificado. Si has usado interfaces en otros lenguajes, los traits cumplen un propósito similar.

Así es como defines un trait:

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

La palabra clave trait introduce el trait, seguida 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 rasgos se vuelven potentes cuando varios tipos diferentes implementan el mismo rasgo. Un Book, un Car y una Person podrían ser Describable, y cada uno proporcionaría su propia descripción única. El rasgo garantiza que todos compartan esta capacidad común.

challenge icon

Desafío

Fácil

¡Definamos 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 distintos 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 que, en una definición de trait, solo declaras la firma del método con un punto y coma: sin cuerpo. Esto le indica a Rust: «cualquier tipo que implemente este trait debe proporcionar un método summarize que devuelva un String».
  • main.rs: Incluye tu módulo de resumen e imprime un mensaje que confirme que tu trait está definido. Como todavía no hemos aprendido a implementar traits (¡esa es la próxima lección!), simplemente verificarás que tu trait se compile 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 únicamente 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 a hacer que las estructuras implementen este trait!

Pruébalo tú mismo

mod summary;

fn main() {
    // TODO: Imprime el mensaje de confirmación de que el trait está definido
    // Expected output: "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 Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Rust online