Циклы как выражения
Часть раздела Logic & Flow путешествия по 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.
Задание
ЛегкоВы получите начальное число в качестве входных данных. Прочитайте входные данные, преобразуйте их в целое число и используйте выражение loop, чтобы найти первое число, делящееся на 7, начиная с этого числа.
Требования:
- Используйте выражение
loop, которое возвращает значение - Начните проверку с введенного числа
- Найдите первое число, которое делится на 7 (остаток от деления на 7 равен 0)
- Используйте
break, чтобы вернуть найденное число из цикла - Выведите результат
Ввод: Одно целое число, представляющее начальное число
Вывод: Выведите первое число, делящееся на 7, начиная с введенного числа
Шпаргалка
В Rust циклы могут быть выражениями, которые возвращают значение. Используйте break, за которым следует значение, чтобы выйти из цикла и вернуть это значение:
let result = loop {
if condition_met {
break 42; // выход из цикла и возврат 42
}
};Пример поиска первого четного числа:
let mut counter = 10;
let first_even = loop {
if counter % 2 == 0 {
break counter; // возврат четного числа
}
counter += 1;
};
println!("First even number: {}", first_even);Попробуйте сами
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);
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
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Итоги: поиск элемента