Циклы как выражения
Часть раздела Логика и управление потоком путешествия по Rust на Coddy. Урок 5 из 66.
В большинстве языков программирования циклы — это инструкции, которые многократно выполняют код. Но в Rust есть уникальная особенность: циклы также могут быть выражениями, возвращающими значение. Это означает, что вы можете присвоить результат цикла переменной.
Чтобы вернуть значение из цикла, используйте break, за которым следует значение, которое вы хотите вернуть:
let result = loop {
// некоторая проверка условия
if condition_met {
break 42; // выйти из цикла и вернуть 42
}
};Вот практический пример, который находит первое чётное число, начиная с 10:
let mut counter = 10;
let first_even = loop {
if counter % 2 == 0 {
break counter; // вернуть чётное число
}
counter += 1;
};
println!("First even number: {}", first_even);Цикл продолжается, пока не найдёт чётное число, затем использует break counter, чтобы выйти из цикла и вернуть это число. Возвращённое значение присваивается first_even.
Задание
ЛегкоВы получите начальное number в качестве input. Прочитайте input, преобразуйте его в целое число и используйте loop как expression, чтобы найти первое number, divisible на 7, начиная с этого number.
Требования:
- Используйте expression
loop, который возвращает значение - Начните checking с input number
- Найдите первое number, divisible на 7 (остаток равен 0 при делении на 7)
- Используйте
break, чтобы вернуть found number из loop - Выведите result
Input: Одно целое число, представляющее начальное number
Output: Выведите первое number, divisible на 7, начиная с input number
Попробуйте сами
use std::io;
fn main() {
// Прочитать ввод
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let start_number: i32 = input.trim().parse().expect("Invalid input");
// TODO: Напишите ваш код ниже
// Используйте выражение цикла, чтобы найти первое число, делящееся на 7
// Вывести результат
// println!("{}", result);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элементаПотренируйтесь самостоятельно: Онлайн-компилятор Rust