Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsPmFnRI 265 of 373 menu
◀ ▶

Возврат значения по условию в Rust

Пусть у нас есть функция, возвращающая сумму чисел от 1 до 5:

fn func() -> i32 { let mut sum = 0; for i in 1..=5 { sum += i; } sum } fn main() { let res = func(); println!("{}", res); // выведет 15 }

Пусть теперь мы расположим return внутри цикла, вот так:

fn func() -> i32 { let mut sum = 0; for i in 1..=5 { sum += i; return sum; } sum } fn main() { let res = func(); println!("{}", res); // выведет 1 }

В этом случае цикл прокрутится лишь одну итерацию и произойдет выход из функции, а заодно и из цикла. За одну итерацию в sum окажется лишь число 1, а не вся нужная сумма.

То, что return расположен внутри цикла, не всегда ошибка. Функция func считает, сколько целых чисел, начиная с 1, нужно сложить, чтобы результат был больше 100:

fn func() -> i32 { let mut sum = 0; let mut i = 1; loop { sum += i; if sum >= 100 { return i; } i += 1; } } fn main() { println!("{}", func()); }

Круг идет, пока условие внутри не сработает и return не отдаст номер шага. Ниже по циклу выполнение в этом случае не доходит.

Есть и прием короче для обычной ветки. Сначала код копит ответ в переменной и только потом отдает его:

fn func(num: i32) -> i32 { let res; if num >= 0 { res = num * num; } else { res = 0; } res } fn main() { println!("{}", func(3)); // выведет 9 }

Перепишем его без лишней переменной. Каждая ветка сама отдает свой результат:

fn func(num: i32) -> i32 { if num >= 0 { return num * num; } else { return 0; } } fn main() { println!("{}", func(3)); // выведет 9 }

Что выведется на экран в результате выполнения следующего кода:

fn func(num: i32) -> i32 { let mut sum = 0; for i in 1..=num { sum += i; return sum; } sum } fn main() { println!("{}", func(5)); }

Объясните почему.

Что хотел сделать автор данного кода? Исправьте ошибку автора.

Напишите функцию, которая параметром принимает число и делит его на 2, пока результат не станет меньше 10. Пусть функция возвращает число делений, которое для этого потребовалось.

Дана следующая функция:

fn func(num1: i32, num2: i32) -> i32 { let res; if num1 > 0 && num2 > 0 { res = num1 * num2; } else { res = num1 - num2; } res } fn main() { println!("{}", func(3, 4)); }

Перепишите ее в сокращенной форме согласно изученной теории.

Дано число:

let n = -2;

Напишите блок, который при отрицательном n сразу отдает 0 через условие, иначе отдает n. Выведите ответ.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить