Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Арифметические операции

// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0

fn interproduct(a: i32, b: i32, c: i32) -> i32 {
    return a * b + b * c + c * a;
}

fn main() {
    println!("result: {}", interproduct(120, 100, 248));
}
This slide should take about 3 minutes.

Это первая функция, отличная от main, которую мы видим, но смысл должен быть понятен: она принимает три целых числа и возвращает целое число. Функции будут рассмотрены подробнее позже.

Арифметика очень похожа на другие языки, с похожим приоритетом операций.

А что насчёт переполнения целых чисел? В C и C++ переполнение знаковых целых на самом деле не определено и может привести к непредсказуемому поведению во время выполнения. В Rust оно определено.

Замените i32 на i16, чтобы увидеть целочисленное переполнение: в отладочной сборке оно вызывает панику (checked), а в релизной — выполняет обёртывание (wrapping). Есть и другие варианты: overflowing, saturating, carrying. Они доступны через синтаксис методов, например (a * b).saturating_add(b * c).saturating_add(c * a).

На самом деле компилятор обнаруживает переполнение константных выражений, поэтому в примере используется отдельная функция.