🦀 Rust

Цикл for в Rust 1.75: подробное руководство

Цикл for в Rust: повторяем действия легко и просто

Что такое цикл и зачем он нужен?

Представь, что тебе нужно 10 раз написать на доске: «Я молодец!». Можно писать каждый раз заново, а можно сказать: «Повтори 10 раз: Я молодец!». В программировании за такие повторения отвечают циклы.

Цикл for — это самый удобный способ выполнить одно и то же действие несколько раз, когда ты точно знаешь, сколько раз это нужно сделать. Например: «выведи номер этажа 5 раз», «повтори фразу 3 раза», «сделай 10 упражнений».

Основной синтаксис цикла for в Rust

В Rust цикл for обычно работает с диапазоном чисел. Диапазон записывается так: start..end. Он включает start, но не включает end.

for переменная in начальное_значение..конечное_значение {
    // код, который выполняется на каждом шаге
}

Разберём на простом примере:

fn main() {
    // Выводим числа от 1 до 5
    for число in 1..6 {
        println!("Число: {}", число);
    }
}

Результат работы программы:

Число: 1
Число: 2
Число: 3
Число: 4
Число: 5

Обрати внимание: мы написали 1..6, но программа вывела числа от 1 до 5. Последнее число (6) не входит в диапазон. Если нужно включить последнее число, используй ..=:

for число in 1..=5 {
    println!("Число: {}", число);
}
// Выведет: 1, 2, 3, 4, 5

Как использовать переменную цикла

На каждом шаге цикла переменная (например, число) получает новое значение. Её можно использовать внутри цикла как обычную переменную.

fn main() {
    println!("Считаем этажи:");
    for этаж in 1..=10 {
        println!("Едем на этаж №{}", этаж);
    }
    println!("Приехали!");
}

Решаем задачи, похожие на те, что ждут тебя

Задача «Лифт»

Лифт показывает каждый этаж, мимо которого проезжает. Нужно вывести все этажи от 0 до нужного.

use std::io;

fn main() {
    println!("На какой этаж едем?");
    
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Ошибка чтения");
    let нужный_этаж: i32 = input.trim().parse().expect("Введите число");
    
    println!("Лифт поехал:");
    for этаж in 0..=нужный_этаж {
        println!("Текущий этаж: {}", этаж);
    }
    println!("Двери открываются. Приехали!");
}

Задача «Банкомат»

Банкомат просит повторить фразу несколько раз. Пользователь вводит фразу и количество повторений.

use std::io;

fn main() {
    println!("Введите фразу для повторения:");
    let mut фраза = String::new();
    io::stdin().read_line(&mut фраза).expect("Ошибка");
    let фраза = фраза.trim();
    
    println!("Сколько раз повторить?");
    let mut число = String::new();
    io::stdin().read_line(&mut число).expect("Ошибка");
    let количество: i32 = число.trim().parse().expect("Введите число");
    
    for раз in 1..=количество {
        println!("{}. {}", раз, фраза);
    }
    println!("Подтверждено!");
}

Задача «Кибербезопасность»

Выводим отчёт о лечении вирусов. Каждый шаг — лечение одного файла.

use std::io;

fn main() {
    println!("Сколько файлов заражено?");
    
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Ошибка");
    let файлы: i32 = input.trim().parse().expect("Введите число");
    
    for номер in 1..=файлы {
        println!("Лечу файл №{}... Вирус удалён!", номер);
    }
    println!("Компьютер здоров!");
}

Частые ошибки новичков

  • Забывают фигурные скобки. В Rust тело цикла обязательно в {}, даже если там одна команда.
  • Путают .. и ..=. 1..5 — это 1,2,3,4 (пять не входит). 1..=5 — это 1,2,3,4,5.
  • Пытаются изменить переменную цикла. В Rust переменная цикла по умолчанию неизменяема. Не пиши for mut i in ... без необходимости.
  • Путают типы. Если диапазон 1..10, то переменная цикла — целое число. Не пытайся записать в неё текст.
  • Забывают про use std::io;. Для ввода данных с клавиатуры это обязательно.

Итоговый пример: «Раздача конфет на день рождения»

Представь, что ты принёс в класс 15 конфет и хочешь угостить каждого одноклассника по одной. Сколько одноклассников у тебя в классе? Программа спросит это число и раздаст конфеты.

use std::io;

fn main() {
    println!("Сколько у тебя одноклассников?");
    
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Ошибка чтения");
    let одноклассников: i32 = input.trim().parse().expect("Введите число");
    
    println!("Начинаем раздачу!");
    
    for номер in 1..=одноклассников {
        println!("Одноклассник №{} получает конфету! 🍬", номер);
    }
    
    println!("Все угощены! С днём рождения! 🎉");
}

Теперь ты знаешь главное о цикле for в Rust. Это твой верный помощник, когда нужно что-то повторить ровно столько раз, сколько ты укажешь. Пробуй, экспериментируй — и программирование станет простым и увлекательным!