はじめに
プログラムは、複数の選択肢から判断したり、複数の値に対して計算を繰り返したりできると便利です。Rust では、判断に Boolean 条件を使い、制御された繰り返しにループを使います。
この実験では、用意された配送サマリーの 4 つの小さな部分を完成させます。各ステップでは、比較式、2 つの分岐結果、累積値の式、受け入れ条件のいずれか 1 つだけを変更します。
Boolean 比較を作成する
このステップでは、荷物の重量と上限を比較し、true または false の結果を保存します。
用意されたプロジェクトに移動し、ソースファイルを開きます。
cd /home/labex/project/shipping-summary
nano src/main.rs
比較演算子 == は、2 つの値が等しいかどうかを確認します。これは、値を保存または代入するために前のステップで使った単一の = とは異なります。開始時の比較結果は、12 と 10 が等しくないため false です。このレポートでは、荷物の重量が上限を超えている場合、その荷物を重いと判定します。
Step 1 の行で、== だけを大なり演算子 > に置き換えます。
let is_heavy = package_weight > heavy_limit; // Step 1
比較の結果として Boolean 値 true が生成され、is_heavy に保存されます。Ctrl+O で保存し、Enter キーを押してから、Ctrl+X で終了します。プログラムを実行します。
cargo run --quiet
1 行目が次のようになれば成功です。
Heavy package: true
If 式で値を選択する
このステップでは、if 式を使って配送ラベルを選択します。
if は Boolean 条件を確認します。条件が true の場合、Rust は最初のブロックを評価します。それ以外の場合は else ブロックを評価します。Rust の if は、値を生成する式として使うこともできます。ここでは両方の分岐がテキストを生成するため、選択したテキストを shipping_label に代入できます。if 全体が 1 つの保存値になるので、両方の分岐は互換性のある型を返す必要があります。
ファイルを開きます。
nano src/main.rs
Step 2 の行で、最初の "unknown" を "Freight" に、2 番目の "unknown" を "Standard" に置き換えます。
let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2
Rust では、条件を括弧で囲む必要はありません。波括弧によって、2 つの結果を明確に分けられます。
保存して終了し、レポートを実行します。
cargo run --quiet
is_heavy は true なので、2 行目は次のようになります。
Shipping label: Freight
For ループで値を加算する
このステップでは、上限付きの for ループと包括的範囲を使って、累積値を作成します。
範囲 3..=6 は、両端を含む 3 から 6 までの整数を表します。for ループは、この範囲内の各値を順番に取り出し、ループ本体の中で一時的に weight という名前で扱います。
可変変数 total_weight は 0 で始まります。繰り返すたびに、現在の weight を既存の合計に加算します。
ファイルを開き、Step 3 の行を見つけます。
nano src/main.rs
weight * 0 だけを weight に置き換えます。
total_weight = total_weight + weight; // Step 3
保存して終了し、コードを確認します。
cargo check
レポートを実行します。
cargo run --quiet
ループによって 3 + 4 + 5 + 6 が加算されるため、次の結果が表示されます。
Total weight: 18
ループ内で判断する
このステップでは、繰り返しと判断を組み合わせて、受け入れた注文数を数えます。
2 つ目のループも、3 から 6 までの重量を処理します。重量が 5 以下の場合、その注文を受け入れます。演算子 <= は小なりイコールを意味します。
ファイルを開き、Step 4 の行を見つけます。
nano src/main.rs
一時的な比較 weight < 0 を次のように置き換えます。
let is_accepted = weight <= 5; // Step 4
次に続く if は文として使われています。is_accepted が true の場合、そのブロックでカウンターを増やします。ここでは拒否された注文に対する処理は必要ないため、else はありません。
保存して終了し、完成したレポートを実行します。
cargo run --quiet
重量 3、4、5 は受け入れられ、6 は受け入れられません。最終出力は次のようになります。
Heavy package: true
Shipping label: Freight
Total weight: 18
Accepted orders: 3
まとめ
Boolean 比較を作成し、if 式で値を選択し、for ループと包括的範囲で処理を繰り返し、累積値を管理しました。また、ループ内に判断処理を配置して、条件に一致する値の数を数えました。



