'if let' 式
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 4/66。
時には、1つの特定のパターンだけをチェックし、他のすべての可能性については気にしない場合があります。意味のあるアームが1つだけで、残りをすべてキャッチする _ を持つ完全な match 式を書くのは、冗長に感じられることがあります。Rustは、このような状況のためのより簡潔な代替手段として if let を提供しています。
if let 式を使用すると、パターンマッチングと条件分岐のロジックを、単一の読みやすい文に組み合わせることができます。基本的な構文は以下の通りです:
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 式は、パターンが一致したときにのみコードブロックを実行します。一致しない場合は何も起こりません。必要でない限り、明示的な "else" ケースを用意する必要はありません。
チャレンジ
簡単入力として数値を受け取ります。入力を読み込み、整数に変換し、if let 式を使用してその数値がちょうど 42 であるかどうかを確認してください。一致する場合は、"The answer!" と出力してください。一致しない場合は、何も出力しないでください。
要件:
if let式を使用して、数値が42と等しいかどうかを確認すること- 数値が
42の場合、"The answer!"と出力すること - 数値がそれ以外の場合は、何も出力しないこと
入力: 単一の整数
出力: 数値が 42 の場合は "The answer!" を出力し、それ以外の場合は何も出力しない
チートシート
if let式は、完全なmatch文を書かずに単一のパターンにマッチさせる簡潔な方法を提供します。
基本的な構文:
if let pattern = value {
// パターンがマッチした場合に実行されるコード
}matchとif letを比較する例:
// matchを使用する場合
let number = 5;
match number {
5 => println!("Found five!"),
_ => (), // 他の値の場合は何もしない
}
// if letを使用する場合(より簡潔)
let number = 5;
if let 5 = number {
println!("Found five!");
}if let式は、パターンがマッチしたときにのみ実行されます。マッチしない場合は、明示的なelse節を追加しない限り、何も起こりません。
自分で試してみよう
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 と等しいか確認してください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。