Los beneficios del destructuring exhaustivo en Rust

Fuentes: In praise of exhaustive destructuring

En el desarrollo de software, la mantenibilidad del código es crucial, y Rust ofrece herramientas para mejorarla. Una de ellas es el destructuring exhaustivo, que consiste en desestructurar explícitamente todos los campos de una estructura en lugar de usar el patrón '..' para ignorar los no utilizados. Aunque al principio puede parecer verboso, esta práctica aporta seguridad al obligar al compilador a advertir cuando se añaden nuevos campos, evitando errores silenciosos.

El autor ilustra esto con un ejemplo: una estructura WeatherReading con campos como temperature, humidity y pressure, y una función is_dangerous que evalúa el peligro. Si se usa acceso directo a campos con el operador '.', al agregar un nuevo campo wind_speed, la función no se actualiza y el compilador no avisa. En cambio, si se desestructuran explícitamente los campos usados, el compilador señala que el nuevo campo no se maneja, forzando al desarrollador a decidir si incluirlo o ignorarlo intencionadamente.

Esta técnica es especialmente útil en implementaciones de conversión entre capas (por ejemplo, From entre modelo de datos y DTO), donde un nuevo campo en una capa obliga a propagarlo a las demás. Además, si varios campos se desestructuran juntos repetidamente, es una señal de que podrían formar una estructura separada.

El artículo también compara con TypeScript y Haskell. TypeScript tiene un truco usando el tipo Required para lograr un efecto similar, mientras que Haskell aún carece de una solución directa, aunque hay una propuesta en marcha.

En resumen, el destructuring exhaustivo en Rust, aunque inicialmente incómodo, es una práctica valiosa para mantener la integridad del código a medida que evoluciona, reduciendo errores y facilitando refactorizaciones.