Learning Rust - If let

Syntax and Semantics

if let

if letは、ある種のパターンマッチのwrapperです。 Overheadをなくす効果もあるそうです。

match option {
    Some(x) => { foo(x) },
    None => {},
}

のように、あるパターンにマッチした場合のみ処理をおこなうとき、 if letを使うと次のように書けます。

if let Some(x) = option {
    foo(x);
}

Some(x)にマッチした場合はfoo(x)が実行されますが、 マッチしなかった場合、なにも起きずに通り過ぎます。

マッチしなかった場合の処理は、else節で書くこともできます。

if let Some(x) = option {
    foo(x);
} else {
    bar();
}

while let

同じように、while letもあります。 あるパターンにマッチする限り処理を繰り返します。

例えば、次のコードは10から0までを順に出力します。

let mut option = Some(10);

while let Some(x) = option {
    println!("{}", x);
    option = if x == 0 {
        None
    } else {
        Some(x - 1)
    }
}