Возврат значения по условию в 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. Выведите ответ.