Принимайте решения и повторяйте операции

RustBeginner
Практиковаться сейчас

Введение

Программы становятся полезными, когда умеют выбирать между вариантами и повторять вычисления для нескольких значений. В Rust для принятия решений используются логические условия, а для управляемого повторения — циклы.

В этой лабораторной работе вы завершите четыре небольшие части подготовленной сводки по отправлениям. На каждом шаге изменяется только одно конкретное выражение: сравнение, результаты двух ветвей, выражение для накопления итога и условие приёма.

Создайте логическое сравнение

На этом шаге вы сравните вес посылки с установленным пределом и сохраните результат сравнения в виде значения true или false.

Перейдите в подготовленный проект и откройте исходный файл:

cd /home/labex/project/shipping-summary
nano src/main.rs

Оператор сравнения == проверяет, равны ли два значения. Он отличается от одиночного =, который ранее использовался для сохранения или присваивания значения. Исходное сравнение даёт false, потому что 12 не равно 10. В отчёте посылка считается тяжёлой, если её вес больше установленного предела.

В строке Step 1 замените только == на оператор «больше» >:

    let is_heavy = package_weight > heavy_limit; // Step 1

Сравнение возвращает логическое значение true, которое сохраняется в is_heavy. Сохраните файл с помощью Ctrl+O, нажмите Enter, а затем выйдите с помощью Ctrl+X. Запустите программу:

cargo run --quiet

Теперь её первая строка должна выглядеть так:

Heavy package: true

Выберите значение с помощью выражения if

На этом шаге вы используете выражение if, чтобы выбрать транспортную маркировку.

Конструкция if проверяет логическое условие. Если условие равно true, Rust вычисляет первый блок; в противном случае вычисляется блок else. В Rust if может быть выражением, возвращающим значение. Обе ветви здесь возвращают текст, поэтому выбранный текст можно присвоить переменной shipping_label. Поскольку весь if становится одним сохранённым значением, его ветви должны возвращать совместимые типы.

Откройте файл:

nano src/main.rs

В строке Step 2 замените первое "unknown" на "Freight", а второе — на "Standard":

    let shipping_label = if is_heavy { "Freight" } else { "Standard" }; // Step 2

Rust не требует скобок вокруг условия. Фигурные скобки ясно отделяют два возможных результата.

Сохраните файл, выйдите из редактора и запустите отчёт:

cargo run --quiet

Так как is_heavy равно true, вторая строка должна выглядеть так:

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

Принимайте решение внутри цикла

На этом шаге вы объедините повторение и условие, чтобы подсчитать принятые заказы.

Второй цикл также перебирает веса от 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

Итоги

Вы создали логические сравнения, выбрали значение с помощью выражения if, повторили операции с помощью цикла for и диапазона с включёнными границами, поддерживали накопленный итог и добавили решение внутри цикла для подсчёта значений, соответствующих условию.