Метод checked_sub
Метод checked_sub выполняет вычитание
одного числа i32 из другого, но в отличие
от обычного оператора -, возвращает
значение типа Option<i32>. Если результат
вычитания укладывается в диапазон допустимых
значений типа i32, метод возвращает
Some(результат). Если же происходит
переполнение (выход за границы диапазона),
метод возвращает None. Параметром метод
принимает число, которое нужно вычесть.
Синтаксис
i32.checked_sub(rhs)
Пример
Давайте выполним обычное вычитание двух чисел,
результат которого точно укладывается в диапазон
типа i32:
fn main()
{
let res = 10i32.checked_sub(5);
println!("{:?}", res);
}
Результат выполнения кода:
Some(5)
Пример
Давайте рассмотрим ситуацию, когда при вычитании
происходит переполнение. Вычтем из минимального
значения i32 единицу:
fn main()
{
let min_val = i32::MIN;
let res = min_val.checked_sub(1);
println!("{:?}", res);
}
Результат выполнения кода:
None
Пример
Давайте используем checked_sub вместе
с конструкцией match для обработки
возможного переполнения:
fn main()
{
let a = 100i32;
let b = 200i32;
match a.checked_sub(b) {
Some(res) => println!("Result: {}", res),
None => println!("Overflow occurred"),
}
}
Результат выполнения кода:
Result: -100
Смотрите также
-
метод
checked_add,
который выполняет сложение с проверкой переполнения -
метод
checked_mul,
который выполняет умножение с проверкой переполнения -
метод
wrapping_sub,
который выполняет вычитание с циклическим переходом -
метод
saturating_sub,
который выполняет вычитание с насыщением