Yomiage
メニュー

Rust実践講座 02:型・mut・式・数値の境界

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

投稿者: しゅりりん

到達点は、変更できる値を明示し、数値の失敗を予測することです。前提は第01回です。

変更は明示する

letの束縛は既定では再代入できません。更新したければmutを付けます。同じ名前をletで宣言し直すシャドーイングは、再代入とは別で、型を変えることもできます。どちらも使えますが、読み手が値の流れを追えるように選びます。

fn main() {
    let mut minutes: u32 = 20;
    minutes += 5;
    let input = " 30 ";
    let input: u32 = input.trim().parse().expect("教材の数値は有効");
    let total = minutes + input;
    let label = if total >= 50 { "目標達成" } else { "継続" };
    println!("{total} {label}");
    println!("{}", 7 / 2);
    println!("{}", 7.0_f64 / 2.0);
    println!("{:?}", u8::MAX.checked_add(1));
}

src/main.rsへ保存してcargo runすると、55と目標達成、3、3.5、Noneが出ます。u32は符号なし32ビット整数、i32は符号付き32ビット整数です。usizeは添字などに使う、プラットフォームに応じた幅の整数です。

式は値を返す

ifは式として値を返せます。その場合、各分岐の型を合わせます。ブロック末尾にセミコロンのない式を置くと、それがブロックの値になります。セミコロンを付けると文になり、意図した値を返さなくなることがあります。

整数の桁あふれは、ビルド設定によってpanicになったりラップする演算になったりするため、必要な意味を明示します。checked_addは失敗をOptionで返し、saturating_addは端の値へ飽和し、wrapping_addは回り込みを表します。「本番ビルドだから安全」ではありません。

expectは失敗時にpanicします。今回の固定文字列では教材の前提を説明するため使いました。利用者が入力する文字列へ同じように使わず、第07回のResultで扱います。

練習と解答

練習:残り件数が0のときに1を引く処理を、失敗が分かる形にしてください。

解答例:0_u32.checked_sub(1) はNoneを返します。残りが0なら0のままにする仕様ならsaturating_subも候補ですが、入力ミスを見逃す可能性があるため、どの意味が必要かを先に決めます。

公式資料

変数と可変性とデータ型を参照できます。


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

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

1 / 16 · 停止中