typestar

Traits y genéricos

19 pasos en 6 series de Rust.

Los traits son la forma en que Rust hace polimorfismo, y los genéricos son la forma en que se mantiene rápido mientras lo hace. El tour cubre definir e implementar traits, funciones genéricas y bounds, y los traits estándar que vale la pena saberse de memoria: Display, From, Iterator, Default.

Siguen la sobrecarga de operadores y la indexación, luego el despacho dinámico y lo que se sacrifica frente a la monomorfización. Diecinueve pasos, y este es el tour que decide si puedes leer el Rust de otras personas.

Empieza este tour

Traits

  • TraitsComportamiento compartido que un tipo puede implementar.
  • Métodos por defectoUn trait puede aportar comportamiento; los implementadores solo escriben lo que difiere.
  • Tipos asociadosCuando un trait tiene un tipo por implementador, un tipo asociado gana al parámetro.

Genéricos

  • Funciones genéricas y boundsUn parámetro de tipo con bounds: una función, todos los tipos que satisfacen el trait.
  • Máximo genéricoUna función genérica con un trait bound: todo el enfoque de Rust al polimorfismo, en miniatura.
  • Structs genéricosUn struct sobre un parámetro de tipo, con bloques impl genéricos o específicos.
  • impl TraitTipos anónimos en las firmas: cualquier argumento que encaje, cualquier retorno que cumpla.

Traits estándar

  • From e IntoImplementa From y obtienes Into gratis, en ambas direcciones de la llamada.
  • Display y DebugDebug es para programadores, Display para personas — deriva uno, escribe el otro.
  • DefaultUn valor vacío canónico, más la sintaxis de actualización de struct para cambiar un campo.
  • Orden personalizadoImplementar Ord decide cómo se ordena tu tipo en todos los lugares donde se compara.

Operadores y acceso

  • Sobrecarga de operadoresLos operadores son traits: implementa Add y + funciona en tu tipo.
  • Implementar IndexIndex le da a tu tipo la sintaxis de corchetes, prestando lo que devuelve.
  • Deref en un newtypeDeref deja que una envoltura reenvíe los métodos del tipo interno sin escribir ninguno.
  • Drop y RAIIDrop corre cuando un valor sale del alcance; así hace Rust la limpieza.

Despacho dinámico

  • Trait objectsUn Vec de Box<dyn Trait> guarda tipos concretos distintos tras una sola interfaz.
  • Implementaciones blanketImplementar un trait para todo tipo que cumpla un bound — un trait de extensión.
  • Implementar IteratorUn método next y todos los adaptadores de la biblioteca estándar funcionan en tu tipo.

Bis

  • shapes.rsTrait objects y genéricos juntos: un registro de figuras que mide y ordena.

Los otros tours de Rust