← SEARCHABLE ARCHIVE
Rust · 2026-07-27

Rust de los fundamentos al dominio — Lección 4

Expresar estados válidos con estructuras y enumeraciones.

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.

Las estructuras agrupan datos relacionados y las enumeraciones enumeran posibles estados. Si usa los dos juntos, no es necesario que exprese a la fuerza combinaciones que no pueden existir con campos y bools.

Estructura e impl.

struct Player {
    name: String,
    health: i32,
}

impl Player {
    fn new(name: impl Into<String>) -> Self {
        Self {
            name: name.into(),
            health: 100,
        }
    }

    fn take_damage(&mut self, amount: i32) {
        self.health = (self.health - amount.max(0)).max(0);
    }
}

El bloque impl define funciones y métodos de creación relacionados con la estructura. &mut self significa que el método toma prestado exclusivamente para modificar el objeto.

Expresando estado con enumeración

enum QuestState {
    Locked,
    Active { progress: u32, goal: u32 },
    Completed { reward_claimed: bool },
}

Solo hay progreso cuando está Activo y recibo de recompensa solo cuando está Completado. Las combinaciones no válidas se reducen en comparación con expresar la misma información con múltiples campos booleanos y que aceptan valores NULL.

coincidencia de patrones

fn describe(state: &QuestState) -> String {
    match state {
        QuestState::Locked => String::from("Locked"),
        QuestState::Active { progress, goal } => {
            format!("{progress}/{goal}")
        }
        QuestState::Completed { reward_claimed: true } => {
            String::from("Reward claimed")
        }
        QuestState::Completed { reward_claimed: false } => {
            String::from("Reward ready")
        }
    }
}

match comprueba si se han procesado todos los casos de la enumeración. Agregar un nuevo estado hará que el código no procesado aparezca como errores de compilación.

Opción y Resultado también son la misma enumeración. En Rust, los estados y las posibilidades de falla se expresan como tipos, y cada caso se maneja mediante coincidencias o métodos dedicados.