← SEARCHABLE ARCHIVE
Rust · 2026-08-06

Rust de los fundamentos al dominio — Lección 7

Gestione errores y proyectos con Result, módulos y Cargo

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Rust expresa fallas recuperables como Resultado. A medida que el proyecto crece, los límites de los módulos, la configuración de carga y las pruebas, junto con los tipos de errores, pasan a formar parte del contrato de código.

Operadores de resultados y signos de interrogación

use std::fs;
use std::io;

fn load_config(path: &str) -> Result<String, io::Error> {
    let text = fs::read_to_string(path)?;
    Ok(text)
}

? saca el valor interno si es un valor exitoso y devuelve un error de la función actual si falla. No es una gramática que ignora los errores, sino una expresión breve entregada a la persona que llama.

Agregar contexto a los errores

fn parse_level(text: &str) -> Result<u32, String> {
    text.trim()
        .parse::<u32>()
        .map_err(|error| format!("invalid level: {error}"))
}

La biblioteca puede devolver errores para que los maneje la persona que llama, convirtiéndolos en registros o mensajes de usuario en los límites del programa. Si entra en pánico por un error de entrada predecible, perderá la oportunidad de recuperarse.

Establecer el alcance público con módulos

mod combat {
    pub struct Damage(pub u32);

    pub fn calculate(attack: u32, defense: u32) -> Damage {
        Damage(attack.saturating_sub(defense).max(1))
    }
}

Los elementos básicos solo están expuestos a módulos y solo se pueden usar contratos con pub. Ocultar la implementación interna reduce la posibilidad de que los cambios se extiendan a otros módulos.

Carga y pruebas

#[cfg(test)]
mod tests {
    use super::combat;

    #[test]
    fn damage_is_at_least_one() {
        assert_eq!(combat::calculate(5, 100).0, 1);
    }
}

Cargo gestiona dependencias, compilaciones, pruebas y creación de documentos con una regla de proyecto. Si mantiene pequeños el tipo de error y el alcance de la divulgación del módulo, el contrato que el usuario necesita conocer también será menor.