Rullst AcademyRullst Academy/Lección
Rust II: datos, decisiones y confianza · Lección 08 / 12

Errores que podemos tratar

Una entrada puede ser texto, cero o una cantidad mayor de la permitida. Result permite responder sin fingir que todo salió bien.

Rutas de aprendizaje12 min

Vamos a descubrir juntos

  1. 1

    Result<T, E> tiene dos variantes: Ok con el resultado y Err con el error. Aquí T es u16 y E es un mensaje fijo &'static str. Ese texto vive en el programa durante toda su ejecución.

  2. 2

    trim elimina espacios en los extremos. parse::<u16>() intenta convertir a un entero sin signo de 16 bits. Texto, negativos y números fuera del tipo pueden fallar antes de la regla de negocio.

  3. 3

    map_err(|_| "number") cambia el error de conversión por un mensaje corto. La pequeña función entre barras ignora el error original. ? devuelve ese Err al llamador; la próxima lección sigue ese recorrido.

  4. 4

    Incluso un u16 válido puede ser inválido para el taller: solo aceptamos de 1 a 20, inclusive. Evita unwrap en entradas que pueden fallar; elige respuestas para Ok y Err.

DE LA LECCIÓN A LA PRÁCTICA

Una guía para seguir a tu ritmo

Lee los pasos antes de usar la referencia de abajo. Los comandos se ejecutan en el terminal del sistema indicado; el registro ocurre en el sitio oficial. Los ejercicios de Rullst Academy son práctica y no verifican tu instalación ni cuenta externa.

fn quantity(text: &str) -> Result<u16, &'static str> {
    let n = text.trim().parse::<u16>().map_err(|_| "number")?;
    if !(1..=20).contains(&n) { return Err("range"); }
    Ok(n)
}
fn main() { println!("{:?}", quantity("3")); }

Enlaces oficiales y siguiente paso

✦
TU MISIÓN

Separar conversión de validación y devolver Ok o Err.

Ahora te toca

Taller de descubrimientos

Lee, predice, investiga

Predice antes de mostrar. Este panel revela resultados preparados; no compila tu código. Los errores se resumen; el texto exacto puede variar con la versión del compilador.
Mini experimento

Simulación didáctica: compara tarjetas y comprueba tus predicciones. El navegador no compila Rust ni inicia un servidor.

fn quantity(text: &str) -> Result<u16, &'static str> {
    let n = text.trim().parse::<u16>().map_err(|_| "number")?;
    if !(1..=20).contains(&n) { return Err("range"); }
    Ok(n)
}
fn main() { println!("{:?}", quantity("3")); }
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Convertir con éxito hace válida la entrada para cualquier regla?

Necesito una pista

Cero cabe en u16, pero el taller exige una cantidad positiva.

Cargando tu camino…

Llévatelo contigo

Prueba 1, 20, 21, -1, texto vacío y " 3 ". Agrupa las salidas en éxito, error numérico y error de intervalo. Explica por qué validar es más que convertir.

RUST II · .rs

Tu espacio de práctica Rust II

Lee, predice y responde aquí. Para compilar realmente, extrae el ZIP en una carpeta nueva, abre la terminal junto a Cargo.toml y usa estos comandos. Debes tener instalados Rust y las herramientas de tu sistema.

cargo check --offline
cargo test --offline
cargo run --offline
Mis archivos y GitHub

El editor guarda un borrador en este navegador y permite descargar o publicar tu .rs. Para ejecutarlo en el proyecto, guarda el archivo editado como src/main.rs. El ZIP contiene la versión inicial; los resultados preparados no cambian con tus ediciones. La evaluación online no verifica ejecución local.

A tu ritmo

Mis archivos y GitHub

Cada lección puede convertirse en un registro propio: código, notas o un plan de práctica. Guardar un archivo en GitHub es opcional y no cambia tus XP.

Manual del alumno

El editor y las descargas se abren cuando esta lección esté disponible para tu cuenta. Revisa el acceso indicado abajo o vuelve al mapa de la ruta.

Comprobando tu acceso a esta lección…

Rullstpetbot

La IA puede equivocarse. Consulta el material de la lección.