問題一覧に戻る
中級パターンマッチング
問題84: if let と while let

'if let'と'while let'は単一のパターンだけを気にする場合の簡潔な構文を提供します。'if let'はオプションのelse分岐を持つ単一パターンのチェックに最適です。'while let'はパターンが失敗するまで繰り返しマッチし、イテレータの消費やシーケンス処理に便利です。完全なmatch式と比べて定型文を削減します。

fn main() {
let config_value = Some(10);

// if let構文
Some(value) = config_value {
println!("Config is: {}", value);
} {
println!("No config");
}

// while let構文
let mut stack = vec![1, 2, 3];

Some(top) = stack.pop() {
println!("Popped: {}", top);
}

// ネストしたif let
let option_value = Some(Some(5));

if let Some(inner) = option_value {
Some(value) = inner {
println!("Nested value: {}", value);
}
}

// enumのパターンマッチ
enum Message {
Hello { id: i32 },
Goodbye,
}

let msg = Message::Hello { id: 5 };

Message::Hello { id } = msg {
println!("Hello message with id: {}", id);
}
}