0Pricing
Learn Rust Coding · レッスン

if letとwhile let

簡潔なマッチング

「if letとwhile let」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全4レッスンが含まれています。

簡潔なマッチング

1つのパターンだけを扱いたい場合があります。if let と while let を使えば、完全な match なしで簡潔にマッチングできます。

if let の形式

if let は、値がパターンに一致した場合にだけブロックを実行し、取得したデータをバインドします。

fn main() {
    let maybe = Some(10);
    if let Some(n) = maybe {
        println!("value is {n}");
    }
}

if let と match の比較

if let は、対象となるアームを1つと、_ => () のフォールスルーを持つ match の糖衣構文です。その他のケースを処理する必要がない場合に使います。

fn main() {
    let config: Option<i32> = None;
    // match equivalent would have an empty _ arm
    if let Some(v) = config {
        println!("configured: {v}");
    }
    println!("done");
}

else の追加

else を付けて、一致しない場合を処理できます。

fn main() {
    let result: Result<i32, String> = Err("boom".to_string());
    if let Ok(v) = result {
        println!("ok: {v}");
    } else {
        println!("failed");
    }
}

let else

let ... else は、パターンに一致した場合にバインドし、一致しなければ(return のように)以降に進まないブロックを実行します。早期終了に便利です。

fn parse(s: &str) -> i32 {
    let Ok(n) = s.parse::<i32>() else {
        println!("not a number");
        return 0;
    };
    n * 2
}

fn main() {
    println!("{}", parse("21"));
    println!("{}", parse("oops"));
}

while let の形式

while let は、値がパターンに一致する間、ループを続けます。スタックのようなものから値を取り出し続ける処理に最適です。

fn main() {
    let mut stack = vec![1, 2, 3];
    while let Some(top) = stack.pop() {
        println!("popped {top}");
    }
}

イテレーターのループ処理

while let では、next を繰り返し呼び出して反復処理できます。None が返されると停止します。

fn main() {
    let mut iter = [10, 20, 30].into_iter();
    while let Some(x) = iter.next() {
        println!("{x}");
    }
}

if let でのガード

&& 条件(Rust 2024)を追加するか、内部に if を入れ子にすることで、ガードを組み合わせられます。

fn main() {
    let value = Some(8);
    if let Some(n) = value {
        if n > 5 {
            println!("big: {n}");
        }
    }
}

使い分け

指針:

  • if let — 1つのパターンを処理し、残りを無視する
  • let else — バインドするか、早期に処理を中断する
  • while let — パターンに一致する間ループする
  • match — 複数のケースを処理する必要がある場合

可読性とのトレードオフ

これらの形式は定型コードを減らせますが、ケースを見えにくくすることがあります。複数のパターンを処理する必要が出てきたら、明確さを優先して完全な match に戻してください。

if let の入れ子

if let を入れ子にすると、オプション値を1つずつアンラップして、連鎖的に処理できます。

fn main() {
    let outer: Option<Option<i32>> = Some(Some(99));
    if let Some(inner) = outer {
        if let Some(value) = inner {
            println!("value is {value}");
        }
    }
}

確認問題

値がパターンに一致し続ける間、ループ本体を繰り返し実行する構文はどれですか?

まとめ

簡潔なマッチングについて学びました。

  • if let は単一のパターンを処理し、必要に応じて else も使える
  • let else はバインドするか、早期に処理を中断する
  • while let はパターンに一致する間ループする
  • 複数のケースを処理する必要がある場合は match に切り替える

よくある質問

「if letとwhile let」レッスンは無料ですか?

はい。「if letとwhile let」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全4レッスンが含まれています。

「if letとwhile let」で何を学びますか?

簡潔なマッチング ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn Rust Codingを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「if letとwhile let」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn Rust Codingレッスンでコードを書いて実行できますか?

はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. match徹底解説
  2. if letとwhile let
  3. @による束縛
  4. 分解
← Learn Rust Codingに戻る