Условия (if/else/switch) в Rust 1.75: подробное руководство
Условия в Rust: if, else и switch
Представь, что ты — робот, который выполняет команды. Обычно ты просто идёшь по программе шаг за шагом. Но что, если нужно принять решение? Например: «Если на улице дождь — возьми зонт, иначе — надень кепку». Именно для таких решений в программировании есть условные операторы. Они позволяют программе выбирать, что делать, в зависимости от данных.
Простое условие: if
Самый базовый оператор — if. Он проверяет, истинно ли условие (правда ли оно). Если да — выполняет код внутри фигурных скобок.
fn main() {
let temperature = 30;
if temperature > 25 {
println!("Жарко! Идём купаться!");
}
println!("Программа завершена.");
}
Вывод: Жарко! Идём купаться! и Программа завершена.
Выбор из двух: if-else
Если нужно сделать что-то одно, когда условие верно, и другое — когда неверно, используй else.
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).unwrap();
let number: i32 = input.trim().parse().unwrap();
if number > 0 {
println!("Число положительное");
} else {
println!("Число отрицательное или ноль");
}
}
Пример работы: вводим 5 → получаем Число положительное. Вводим -3 → Число отрицательное или ноль.
Много вариантов: else if
Когда вариантов больше двух, можно выстроить цепочку проверок.
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).unwrap();
let age: i32 = input.trim().parse().unwrap();
if age < 7 {
println!("Детский сад");
} else if age < 18 {
println!("Школа");
} else if age < 65 {
println!("Работа");
} else {
println!("Пенсия");
}
}
Важно: Rust проверяет условия по порядку. Как только находит первое истинное — выполняет его блок и выходит из всей цепочки.
Выбор по значению: match (аналог switch)
В Rust нет привычного switch, но есть мощный match. Он идеально подходит, когда нужно сравнить одну переменную с разными конкретными значениями.
fn main() {
let mut input = String::new();
std::io::stdin().read_line(&mut input).unwrap();
let day: i32 = input.trim().parse().unwrap();
match day {
1 => println!("Понедельник — начало недели"),
2 => println!("Вторник"),
3 => println!("Среда"),
4 => println!("Четверг"),
5 => println!("Пятница — почти выходные"),
6 | 7 => println!("Выходной!"),
_ => println!("Такого дня недели нет"),
}
}
Символ _ — это «всё остальное». Он срабатывает, если ни одно из перечисленных значений не подошло.
Разбор задачи: «Что больше?»
Напишем программу, которая сравнивает два числа и говорит, какое больше.
fn main() {
let mut input1 = String::new();
let mut input2 = String::new();
println!("Введите первое число:");
std::io::stdin().read_line(&mut input1).unwrap();
println!("Введите второе число:");
std::io::stdin().read_line(&mut input2).unwrap();
let a: i32 = input1.trim().parse().unwrap();
let b: i32 = input2.trim().parse().unwrap();
if a > b {
println!("Первое число ({}) больше второго ({})", a, b);
} else if b > a {
println!("Второе число ({}) больше первого ({})", b, a);
} else {
println!("Числа равны");
}
}
Разбор задачи: «Чётность числа»
Проверим, делится ли число на 2 без остатка. Для этого используем оператор % — остаток от деления.
fn main() {
let mut input = String::new();
println!("Введите число ракушек:");
std::io::stdin().read_line(&mut input).unwrap();
let shells: i32 = input.trim().parse().unwrap();
if shells % 2 == 0 {
println!("Число {} — чётное! Можно разложить парами.", shells);
} else {
println!("Число {} — нечётное. Одна ракушка останется без пары.", shells);
}
}
Частые ошибки новичков
- Забыть фигурные скобки. В Rust после условия обязательно нужны
{ }, даже если внутри всего одна строка. - Использовать
=вместо==. Одно равно — это присваивание, два — сравнение. Ошибка:if x = 5. - Путать порядок в
else if. Rust проверяет сверху вниз. Если поставить общее условие раньше частного, частное никогда не сработает. - Забыть про
_вmatch. Если не указать вариант «всё остальное», компилятор выдаст ошибку — он требует, чтобы были обработаны все возможные значения.
Итоговый пример: «Парк аттракционов»
Представим, что мы пишем программу для кассира. Посетители делятся на три зоны: для детей (до 12 лет), для подростков (12–17) и для взрослых (от 18).
fn main() {
let mut input = String::new();
println!("Введите возраст посетителя:");
std::io::stdin().read_line(&mut input).unwrap();
let age: i32 = input.trim().parse().unwrap();
if age < 0 {
println!("Ошибка: возраст не может быть отрицательным!");
} else if age < 12 {
println!("Зона для детей: карусели и батуты");
} else if age < 18 {
println!("Зона для подростков: американские горки и автодром");
} else {
println!("Зона для взрослых: экстремальные аттракционы");
}
// Используем match для дополнительной проверки
match age {
0..=2 => println!("Специальное предложение: бесплатный вход для малышей!"),
65..=120 => println!("Скидка для пенсионеров 50%"),
_ => println!("Стандартный билет"),
}
}
Как это работает:
- Сначала программа спрашивает возраст.
- Проверяет, не ввёл ли пользователь отрицательное число (защита от ошибки).
- Распределяет по возрастным зонам с помощью
if-else if-else. - Дополнительно проверяет особые случаи (младенцы и пенсионеры) с помощью
match.
Условные операторы — это основа любого принятия решений в программе. Потренируйся на задачах выше, и ты быстро научишься управлять логикой своих программ!