'if let' 式
CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 4/66。
特定のパターンを1つだけ確認し、その他のすべての可能性については気にしなくてよい場合があります。意味のあるアームを1つと、すべてに一致する _ だけを使った完全な match 式を書くのは、冗長に感じることがあります。Rust では、このような状況に対して、より簡潔な代替手段として if let が用意されています。
if let式を使うと、パターンマッチングと条件ロジックを、読みやすい1つの文に組み合わせることができます。基本的な構文は次のとおりです。
if let pattern = value {
// パターンが一致した場合に実行するコード
}たとえば、有用なアームが1つしかないmatchを書く代わりに:
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // 他の値に対しては何もしない
}if letを使うと、よりすっきり書けます:
let number = 5;
if let 5 = number {
println!("Found five!");
}if let 式は、pattern が matches した場合にのみコードブロックを実行します。match しない場合は、nothing が起こりません。明示的な「else」ケースは、指定したい場合を除いて必要ありません。
チャレンジ
簡単入力として数値を受け取ります。入力を読み取り、整数に変換し、if let 式を使用して、その数値が正確に 42 かどうかを確認します。一致する場合は、"The answer!" を出力します。一致しない場合は、何も出力しません。
要件:
if let式を使用して、その数値が42と等しいかどうかを確認する- 数値が
42の場合は、"The answer!"を出力する - 数値がそれ以外の場合は、何も出力しない
入力: 1つの整数
出力: 数値が 42 の場合は "The answer!" を出力し、それ以外の場合は何も出力しない
自分で試してみよう
use std::io;
fn main() {
// 入力を読み取る
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let number: i32 = input.trim().parse().expect("Please enter a valid number");
// TODO: 以下にコードを書いてください
// if let を使って number が 42 と等しいか確認する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ