Arithmetische Operationen in Rust
Что это и зачем?
Представь, что ты играешь в компьютерную игру и хочешь посчитать, сколько очков ты заработал за день. Или, например, ты решил разделить пиццу между друзьями и хочешь узнать, сколько кусочков достанется каждому. В программировании такие расчёты называются арифметическими операциями.
В Rust, как и в любом другом языке программирования, есть специальные символы для сложения, вычитания, умножения и деления. Они работают почти как на обычном калькуляторе, но с некоторыми особенностями. Зачем это нужно? Без арифметики невозможно написать ни одну программу: от простого калькулятора до сложной игры или приложения для банка.
Давай разберёмся, как это работает в Rust!
Синтаксис и примеры кода
В Rust арифметические операции выглядят очень просто. Вот основные символы:
+— сложение-— вычитание*— умножение/— деление%— остаток от деления (показывает, сколько останется, если разделить число нацело)
Давай посмотрим на примеры. Представь, что мы пишем программу для подсчёта карманных денег.
// Пример 1: Сложение
let money_monday = 100; // В понедельник дали 100 рублей
let money_tuesday = 150; // Во вторник дали 150 рублей
let total = money_monday + money_tuesday; // Складываем
println!("Всего денег: {}", total); // Выведет: Всего денег: 250
В этом примере мы создали две переменные (money_monday и money_tuesday), записали в них числа, а потом сложили их с помощью +. Результат сохранили в переменную total и вывели на экран.
// Пример 2: Вычитание
let pizza_slices = 8; // У нас 8 кусочков пиццы
let eaten = 3; // Съели 3 кусочка
let remaining = pizza_slices - eaten; // Вычитаем
println!("Осталось кусочков: {}", remaining); // Выведет: Осталось кусочков: 5
Здесь мы отняли от общего количества кусочков те, что съели. Всё как в жизни!
// Пример 3: Умножение
let friends = 4; // 4 друга
let candies_per_friend = 5; // Каждому по 5 конфет
let total_candies = friends * candies_per_friend; // Умножаем
println!("Всего нужно конфет: {}", total_candies); // Выведет: Всего нужно конфет: 20
Умножение помогает, когда нужно посчитать общее количество одинаковых предметов. Если у каждого друга по 5 конфет, а друзей 4, то всего конфет 4 × 5 = 20.
// Пример 4: Деление
let total_apples = 10; // 10 яблок
let children = 3; // 3 детей
let apples_per_child = total_apples / children; // Делим
println!("Каждому ребёнку по {} яблок", apples_per_child); // Выведет: Каждому ребёнку по 3 яблок
Обрати внимание: 10 разделить на 3 — это 3 с остатком. Но Rust при делении целых чисел отбрасывает дробную часть! Поэтому результат — 3, а не 3.333... Если нужно получить точный результат, нужно использовать числа с плавающей точкой (о них позже).
// Пример 5: Остаток от деления
let total_apples = 10;
let children = 3;
let remainder = total_apples % children; // Остаток от деления
println!("Останется яблок: {}", remainder); // Выведет: Останется яблок: 1
Оператор % показывает, сколько останется, если разделить число нацело. 10 ÷ 3 = 3 (целых) и 1 в остатке. Это очень полезно, например, чтобы узнать, чётное число или нет.
Сравнение с Python
Если ты уже пробовал Python, то заметишь, что арифметика в Rust очень похожа. Но есть важные отличия.
В Python деление целых чисел даёт дробный результат:
# Python
print(10 / 3) # Выведет: 3.3333333333333335
В Rust то же самое деление даст целое число (3), если оба числа целые. Чтобы получить дробный результат, нужно явно указать, что числа дробные:
// Rust
let a: f64 = 10.0; // f64 — это дробное число
let b: f64 = 3.0;
println!("{}", a / b); // Выведет: 3.3333333333333335
Ещё одно отличие: в Rust нельзя просто так смешивать целые и дробные числа в одной операции. Нужно их преобразовывать:
// Rust — так нельзя!
let x = 5;
let y = 2.5;
// let z = x + y; // Ошибка! Разные типы
// Правильно:
let z = x as f64 + y; // Преобразуем x в дробное число
println!("{}", z); // Выведет: 7.5
В Python такое смешивание работает автоматически:
# Python
x = 5
y = 2.5
print(x + y) # Выведет: 7.5
Rust строже относится к типам данных, но это помогает избежать ошибок.
Типичные ошибки новичков
Вот самые частые ошибки, которые допускают начинающие программисты на Rust:
- Деление на ноль. Если попробовать разделить число на 0, программа упадёт с ошибкой. Всегда проверяй, что делитель не равен нулю.
- Забыл про остаток. Новички часто думают, что 10 / 3 = 3.333, но в Rust для целых чисел это 3. Если нужен остаток, используй
%. - Смешивание типов. Нельзя складывать целое число с дробным без преобразования. Rust скажет: "Эй, типы разные!". Используй
asдля преобразования. - Переполнение. Если число слишком большое для своего типа, может произойти переполнение. Например, если в
u8(число от 0 до 255) попытаться записать 256, будет ошибка или неожиданный результат. - Порядок операций. Как в математике, умножение и деление выполняются раньше сложения и вычитания. Если хочешь изменить порядок, используй скобки:
(2 + 3) * 4.
Вот пример неправильного кода, который часто пишут новички:
// Ошибка: деление на ноль
let a = 10;
let b = 0;
// let result = a / b; // Программа упадёт!
// Ошибка: смешивание типов
let x = 5;
let y = 2.5;
// let z = x + y; // Ошибка компиляции
// Правильный вариант:
let z = x as f64 + y;
println!("{}", z);
Итог
Арифметические операции — это основа программирования. В Rust они работают почти как в обычной математике, но с некоторыми правилами:
- Используй
+,-,*,/,%для базовых операций. - Помни, что деление целых чисел даёт целый результат.
- Не смешивай целые и дробные числа без преобразования.
- Избегай деления на ноль.
- Используй скобки для управления порядком операций.
Попробуй написать свою первую программу с арифметикой! Например, калькулятор для подсчёта баллов в игре или для расчёта времени на домашнее задание. Чем больше практикуешься, тем быстрее запомнишь все правила.
Удачи в изучении Rust! Это мощный язык, и арифметика — только начало твоего пути.