Rust: ownership e iteradores sin clonar las órdenes
Compara un bucle y try_fold sobre un slice prestado. Comprueba que conservas la entrada y detectas el desbordamiento.
Luis Tavarez ·
Leer no exige transferir la propiedad
Las dos funciones reciben un slice prestado de órdenes. main conserva el vector y puede consultarlo después de calcular el total. No se usa clone para eludir el diseño de propiedad ni se necesita compartir estado mutable.
Dos implementaciones del mismo contrato
El bucle acumula con checked_add. La versión con iteradores filtra órdenes pagadas y usa try_fold con la misma suma comprobada. Ambas devuelven Option: Some contiene el total y None expresa un desbordamiento.
El operador de propagación dentro del bucle devuelve None si una suma falla. El iterador hace lo equivalente a través de try_fold. No debes reemplazar checked_add por una suma que dependa del comportamiento de overflow del perfil de compilación.
Pruebas que acompañan la decisión
El programa comprueba un conjunto normal, la entrada vacía y dos valores que exceden u64. Por último vuelve a usar orders, demostrando que el préstamo no transfirió la propiedad. No mide throughput ni demuestra que una forma sea más rápida.
Llevarlo a un servicio
Una respuesta HTTP podría mapear None a un error de dominio explícito. Si necesitas explicar distintas causas, cambia Option por Result con un tipo de error. Concurrencia, I/O y transacciones quedan fuera de este cálculo puro; los préstamos no resuelven por sí mismos la coordinación entre servicios.