Rust 中的比较运算符与逻辑运算符
Что это и зачем?
Представь, что ты — капитан космического корабля. Твой компьютер должен принимать решения: «Если топлива больше 10 литров — летим дальше, иначе — заправка». Или: «Если на радаре есть враг И щиты включены — атакуй». Операторы сравнения и логические операторы — это те самые «если», «и», «или», «не» в программировании. Они помогают программе выбирать, что делать, в зависимости от данных.
В Rust эти операторы выглядят немного строже, чем в математике, но зато не дают ошибиться. Например, ты не сможешь случайно перепутать «равно» с «присвоить» — компилятор сразу укажет на ошибку.
Синтаксис и примеры кода
Вот как выглядят основные операторы сравнения в Rust:
==— равно (проверяет, одинаковы ли значения)!=— не равно>— больше<— меньше>=— больше или равно<=— меньше или равно
Логические операторы:
&&— логическое «И» (всё должно быть истинно)||— логическое «ИЛИ» (хотя бы одно истинно)!— логическое «НЕ» (переворачивает истину на ложь)
Пример 1: Проверка возраста для просмотра фильма
fn main() {
let возраст = 14;
let минимальный_возраст = 12;
// Проверяем, можно ли смотреть фильм
let можно_смотреть = возраст >= минимальный_возраст;
println!("Можно смотреть фильм? {}", можно_смотреть); // Выведет: true
}
Здесь возраст >= минимальный_возраст — это сравнение. Если возраст 14, а нужно 12, то условие истинно (true). Если бы возраст был 10, получили бы false.
Пример 2: Проверка пароля (логическое И)
fn main() {
let пароль = "secret123";
let подтверждение = "secret123";
// Должны совпасть оба условия
let пароли_совпадают = (пароль == "secret123") && (подтверждение == "secret123");
println!("Пароли совпадают? {}", пароли_совпадают); // true
}
Оператор && требует, чтобы оба сравнения были истинными. Если хоть одно неверно — результат false.
Пример 3: Выбор завтрака (логическое ИЛИ)
fn main() {
let есть_яйца = false;
let есть_хлеб = true;
// Можно сделать бутерброд или яичницу
let можно_поесть = есть_яйца || есть_хлеб;
println!("Можно позавтракать? {}", можно_поесть); // true (хотя бы хлеб есть)
}
|| даёт true, если хотя бы одно условие верно. Если бы не было ни яиц, ни хлеба — было бы false.
Пример 4: Проверка, что число не равно нулю (логическое НЕ)
fn main() {
let число = 7;
let не_ноль = !(число == 0); // То же самое, что число != 0
println!("Число не ноль? {}", не_ноль); // true
}
Оператор ! переворачивает true на false и наоборот. Если число равно 0, то число == 0 — true, а !(true) — false.
Пример 5: Сложное условие для игры
fn main() {
let здоровье = 80;
let есть_щит = true;
let враг_рядом = false;
// Атакуем, если здоровье > 50 И есть щит, ИЛИ враг очень близко
let атаковать = (здоровье > 50 && есть_щит) || враг_рядом;
println!("Атаковать? {}", атаковать); // true (здоровье 80 > 50 и щит есть)
}
Здесь мы комбинируем операторы. Сначала вычисляется здоровье > 50 && есть_щит (true), потом true || false даёт true.
Сравнение с Python
В Python те же операторы выглядят почти так же, но есть важные отличия:
- В Python логические операторы пишутся словами:
and,or,not(в Rust — символами:&&,||,!). - В Python можно писать
5 < x < 10(проверка, что x между 5 и 10). В Rust так нельзя — нужно писатьx > 5 && x < 10. - В Python
==и!=работают так же, но в Rust строже с типами: нельзя сравнить число и строку напрямую.
Пример на Python:
возраст = 14
минимальный = 12
можно = возраст >= минимальный # True
print(можно)
# Логические операторы словами
пароль = "secret"
подтверждение = "secret"
совпадают = (пароль == "secret") and (подтверждение == "secret")
print(совпадают) # True
Как видишь, логика та же, но синтаксис разный. Rust использует символы, потому что они короче и чётче, а Python — английские слова для читаемости.
Типичные ошибки новичков
- Путают
=и==. В Rust=— это присваивание (положить значение в переменную), а==— сравнение. Если написатьif x = 5, компилятор выдаст ошибку. - Забывают про приоритет операций. Например,
здоровье > 50 && есть_щит || враг_рядомможет сработать не так, как ты думаешь. Всегда используй скобки:(здоровье > 50 && есть_щит) || враг_рядом. - Пытаются сравнить разные типы. В Rust нельзя написать
5 == "5"— число и строку нельзя сравнивать. Нужно сначала преобразовать:5 == "5".parse().unwrap(). - Используют
&&вместо&.&— это оператор взятия ссылки, а не логическое «И». Новички часто путают. - Думают, что
!меняет переменную.!xне меняет саму переменную x, а только возвращает противоположное значение. Чтобы изменить, нужно написатьx = !x.
Итог
Операторы сравнения и логические операторы — это основа любого принятия решений в программировании. В Rust они строгие и не прощают ошибок, но именно это помогает тебе писать надёжный код с самого начала. Запомни главное:
- Сравнения всегда возвращают true или false.
&&— всё должно быть правдой,||— хотя бы одно,!— наоборот.- Всегда ставь скобки в сложных условиях.
- Не путай
=и==— это разные вещи.
Попробуй написать свою программу с этими операторами — например, калькулятор, который проверяет, можно ли купить билет в кино (возраст и наличие денег). Удачи в космических приключениях с Rust!