Rullst AcademyRullst Academy/Lección
Rust: de la idea al programa · Lección 08 / 08

Proyecto: central de puntos

Unamos valores, decisiones, bucles, funciones, préstamos y Option en un programa que podrás descargar y ejecutar.

Rutas de aprendizaje14 min

Vamos a descubrir juntos

  1. 1

    Contrato del proyecto: cada acierto vale 10 puntos. Las rondas con tres o más aciertos reciben 5 puntos extra. Los ejemplos usan entre cero y cinco aciertos.

  2. 2

    Separa responsabilidades: bonus decide si hay extra con Option; score calcula puntos; report recibe el nombre como &str y crea un mensaje con format!.

  3. 3

    format! usa espacios como {} para insertar valores y devuelve una String. A diferencia de println!, no imprime por sí mismo. main decide qué mostrar y recorre rondas con for.

  4. 4

    Antes de ejecutar, predice casos sin aciertos, debajo del límite del extra y justo en él. El ZIP incluye pruebas, comentarios en el idioma elegido e instrucciones para cargo run y cargo test.

  5. 5

    Este proyecto usa Rust y su biblioteca estándar, sin Rullst. La primera ruta de Rullst Academy exporta una aplicación web con Rullst 12. El lenguaje es la base común; el framework añade herramientas web.

✦
TU MISIÓN

Construye la regla de puntuación y comprueba tres escenarios antes de descargar el proyecto Rust.

Ahora te toca

Taller de descubrimientos

Construye y comprueba tu regla

Cada acierto vale 10. Desde 3 aciertos, añade 5. Elige las tres constantes y predice resultados. Es una actividad de montaje guiado; el ZIP contiene el programa Rust ejecutable.
Tu fragmento en construcción
fn score(correct: u32) -> u32 {
    let base = correct * {1};
    if correct >= {3} { base + {2} } else { base }
}
// score(0): {4}?  score(2): {5}?  score(3): {6}?
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Qué comprueba mejor la regla antes de ampliar el programa?

Necesito una pista

Una regla puede acertar un ejemplo y fallar justo en el límite.

Cargando tu camino…

¿Cómo reconocer lo que aprendí?

Usa objetivos y desafío para reflexionar o conversar con alguien que pueda ayudar. Es autoevaluación orientada: no envía respuestas, no da XP ni verifica automáticamente autonomía.

En Fundamentos, modifica un ejemplo, predice, comprueba un caso normal y uno de error, y explica tus decisiones. Si necesitas ayuda, identifica qué practicar otra vez.

Tu desafío de transferencia

En el proyecto descargado, cambia los puntos por acierto o el límite del extra. Actualiza primero los resultados esperados en las pruebas; después ajusta la regla y comprueba cargo test.

Guarda evidencia: predicción, intento, resultado, cambio propio y lo que aún no explicas. Busca feedback si es posible; si estudias solo, vuelve después sin copiar y compara intentos.

Inténtalo de nuevo en otro momento

Tras una pausa, explica la idea sin abrir la solución y prueba otro ejemplo. Compara con tu primer intento: ¿qué puedes hacer por tu cuenta y dónde necesitas una pista? Puedes escribir, hablar o dibujar; elige una forma de comprobar la misma idea. Registra la ayuda recibida, incluida IA, y vuelve al fragmento necesario. No hay plazo universal ni XP extra por este registro.

Las conclusiones y XP registran evaluaciones de Rullst Academy. Una ruta introductoria puede ayudar en la vida diaria y preparar estudios; sola no demuestra dominio completo ni preparación profesional. Nivel indica profundidad, no edad.

Llévatelo contigo

En el proyecto descargado, cambia los puntos por acierto o el límite del extra. Actualiza primero los resultados esperados en las pruebas; después ajusta la regla y comprueba cargo test.

Quiero ver el Rust que hay detrás

Esta parte es opcional. No necesitas memorizar el código para continuar.

fn bonus(correct: u32) -> Option<u32> {
    if correct >= 3 { Some(5) } else { None }
}

fn score(correct: u32) -> u32 {
    let base = correct * 10;
    match bonus(correct) {
        Some(extra) => base + extra,
        None => base,
    }
}

fn report(name: &str, correct: u32) -> String {
    format!("{name}: {}", score(correct))
}

fn main() {
    let name = String::from("Robo");
    for correct in 0..=5 {
        println!("{}", report(&name, correct));
    }
}
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.