Expresiones if let

La [expresión if let][(https://doc.rust-lang.org/reference/expressions/if-expr.html#if-let-expressions) te permite ejecutar código diferente en función de si un valor coincide con un patrón:

fn main() {
    let arg = std::env::args().next();
    if let Some(value) = arg {
        println!("Program name: {value}");
    } else {
        println!("Missing name?");
    }
}

Consulta de nuevo la sección de coincidencia de patrones para obtener más información sobre los patrones de Rust.

  • A diferencia de match, if let no tiene que cubrir todas las ramas, pudiendo así conseguir que sea más conciso que match.

  • Un uso habitual consiste en gestionar valores Some al trabajar con Option.

  • A diferencia de match, if let no admite cláusulas guardia para la coincidencia de patrones.

  • A partir de la versión 1.65, una construcción let-else similar permite realizar una tarea de desestructuración o, si falla, ejecutar un bloque necesario para anular el flujo de control normal (con panic/return/break/continue)::

    fn main() {
        println!("{:?}", second_word_to_upper("foo bar"));
    }
     
    fn second_word_to_upper(s: &str) -> Option<String> {
        let mut it = s.split(' ');
        let (Some(_), Some(item)) = (it.next(), it.next()) else {
            return None;
        };
        Some(item.to_uppercase())
    }