Yomiage
メニュー

Rust実践講座 03:関数・制御フロー・パターン

更新 2026/9/27 6:22:11 公開

投稿者: しゅりりん

到達点は、入力と戻り値の型を明示し、境界を含む処理を組み立てることです。前提は第02回です。

関数の入口と出口を決める

fnの引数には型を書き、戻り値は矢印の後に書きます。関数の末尾の式が戻り値になります。早く処理を終えたい場所ではreturnも使えます。

fn shipping(amount: u32, member: bool) -> u32 {
    let threshold = if member { 3000 } else { 5000 };
    if amount >= threshold { 0 } else { 500 }
}

fn main() {
    let mut total = 0;
    for amount in [0, 4999, 5000] {
        let fee = shipping(amount, false);
        total += fee;
        println!("{amount}: {fee}");
    }
    println!("合計: {total}");
    let mut attempt = 0;
    let result = loop {
        attempt += 1;
        if attempt == 3 { break attempt * 10; }
    };
    println!("{result}");
}

src/main.rsで実行すると送料は500、500、0、合計1000、最後は30です。loopは明示的にbreakするまで続き、breakに値を付けて結果を返せます。whileは条件が真の間続きます。

範囲と列挙を使い分ける

0..3 は0、1、2で、0..=3 は3も含みます。配列の添字のためだけに範囲を書くより、要素を直接forで受け取る方が範囲外アクセスを避けやすくなります。添字も必要ならiterとenumerateを使う方法を第10回で学びます。

matchは値の形に応じて分岐します。扱う可能性を網羅する必要があり、列挙型と組み合わせると「状態を一つ扱い忘れた」問題を発見しやすくなります。単純な条件ならif、値の種類で分けるならmatchという使い分けを意識します。

今回の購入額はu32なので、関数へ負の整数をそのまま渡せません。ただし「負を拒否する」だけで、現実の上限や不正な文字列まで解決できるわけではありません。文字列から型へ変換する入口にも検査が必要です。

練習と解答

練習:会員の2999と3000、非会員の4999と5000を試し、期待した送料を書いてください。

解答:順に500、0、500、0です。境界を一つずつ挟んで試すことで、以上と超過の取り違えを発見できます。すべての数値を試すより、仕様が切り替わる点を選ぶのが基本です。

公式資料

関数と制御フローが参照先です。


Rust全20回の目次 | 前の回 | 次の回

このブラウザでは Web Speech API が利用できません。

1 / 16 · 停止中