Menu
Coddy logo textTech

'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" ケースを用意する必要はありません。

challenge icon

チャレンジ

簡単

入力として数値を受け取ります。入力を読み込み、整数に変換し、if let 式を使用してその数値がちょうど 42 であるかどうかを確認してください。一致する場合は、"The answer!" と出力してください。一致しない場合は、何も出力しないでください。

要件:

  • if let 式を使用して、数値が 42 と等しいかどうかを確認すること
  • 数値が 42 の場合、"The answer!" と出力すること
  • 数値がそれ以外の場合は、何も出力しないこと

入力: 単一の整数

出力: 数値が 42 の場合は "The answer!" を出力し、それ以外の場合は何も出力しない

チートシート

if let式は、完全なmatch文を書かずに単一のパターンにマッチさせる簡潔な方法を提供します。

基本的な構文:

if let pattern = value {
    // パターンがマッチした場合に実行されるコード
}

matchif 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 と等しいか確認してください
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Logic & Flowのすべてのレッスン