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

Una estructura con responsabilidad

En el taller, un equipo tiene nombre y cantidad disponible. Una struct mantiene juntos los datos relacionados.

Rutas de aprendizaje12 min

Vamos a descubrir juntos

  1. 1

    struct Item define campos con nombre y tipo. Este primer modelo guarda solo la cantidad: Item { available: 3 } crea una instancia. Dos instancias pueden tener valores distintos; el proyecto final añade nombre y total.

  2. 2

    impl Item agrupa funciones asociadas al tipo. Un método con &self consulta; con &mut self puede actualizar. Llamar a item.available() presta el elemento al método.

  3. 3

    take_one comprueba si hay una unidad antes de restar. Si está vacío, devuelve false y conserva el estado. La regla impide restar de cero en este caso.

  4. 4

    El campo available y el método available() comparten nombre, pero los paréntesis distinguen la llamada. La API final usará campos privados en un módulo para concentrar las reglas de cambio.

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.

struct Item { available: u16 }
impl Item {
    fn available(&self) -> u16 { self.available }
    fn take_one(&mut self) -> bool {
        if self.available == 0 { return false; }
        self.available -= 1;
        true
    }
}
fn main() {
    let mut item = Item { available: 3 };
    item.take_one();
    println!("{}", item.available());
}

Enlaces oficiales y siguiente paso

✦
TU MISIÓN

Crear structs, implementar métodos y distinguir &self de &mut self.

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.

struct Item { available: u16 }
impl Item {
    fn available(&self) -> u16 { self.available }
    fn take_one(&mut self) -> bool {
        if self.available == 0 { return false; }
        self.available -= 1;
        true
    }
}
fn main() {
    let mut item = Item { available: 3 };
    item.take_one();
    println!("{}", item.available());
}
Prepara tus respuestas y comprueba cuando estés listo.
Una pausa para entender

¿Por qué comprobar antes de restar?

Necesito una pista

La comprobación protege una regla concreta; no demuestra todo el programa.

Cargando tu camino…

Llévatelo contigo

Añade otra llamada a take_one en el escenario 2 e imprime el bool devuelto. Explica qué lee y cambia el método; crea otra instancia sin cambiar la primera.

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.