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フィードバックを取得できます。ローカル設定は不要です。