Флаги в функциях в Rust
В функциях можно использовать флаги
в неявном виде с помощью инструкции
return. Давайте посмотрим,
как это делается. Пусть у нас есть
следующая функция, проверяющая,
что все элементы массива положительные
числа:
fn is_positive(arr: &[i32]) -> bool {
let mut flag = true;
for elem in arr {
if *elem < 0 {
flag = false;
}
}
return flag;
}
fn main() {
}
Давайте перепишем код функции с помощью неявного использования флагов:
fn is_positive(arr: &[i32]) -> bool {
for elem in arr {
if *elem < 0 {
return false;
}
}
return true;
}
fn main() {
}
Как это работает: если в массиве найдется
нужный элемент - мы выйдем из функции
(и из цикла тоже) с помощью return.
Но если в массиве не найдется нужный элемент -
выхода из функции не произойдет и выполнение
дойдет до команды return true. И
получится, что функция вернет true
в знак того, что в массиве все элементы
положительные.
Сделайте функцию, которая параметром будет принимать массив с числами, и проверять, что все элементы в этом массиве являются четными числами.
Сделайте функцию, которая параметром будет принимать число и проверять, что все цифры этого числа являются нечетными.
Сделайте функцию, которая параметром будет принимать массив и проверять, есть ли в этом массиве два одинаковых элемента подряд.
Функция может отдать логическое значение и без цикла.
Конструкцию if, которая возвращает только да
или нет, записывают короче. Сначала длинная форма:
fn is_positive(n: i32) -> bool {
if n >= 0 {
return true;
} else {
return false;
}
}
fn main() {
println!("{}", is_positive(3)); // выведет true
}
Сокращенная форма отдает само сравнение. Последнее
выражение уже имеет тип bool:
fn is_positive(n: i32) -> bool {
n >= 0
}
fn main() {
println!("{}", is_positive(3)); // выведет true
println!("{}", is_positive(-1)); // выведет false
}
Дана следующая функция:
fn func(a: i32, b: i32) -> bool {
if a == b {
return true;
} else {
return false;
}
}
Перепишите ее код в сокращенной форме согласно изученной теории.
Дана следующая функция:
fn func(a: i32, b: i32) -> bool {
if a != b {
return true;
} else {
return false;
}
}
Перепишите ее код в сокращенной форме согласно изученной теории.
Дана следующая функция:
fn func(a: i32, b: i32) -> bool {
if a + b >= 10 {
return true;
} else {
return false;
}
}
Перепишите ее код в сокращенной форме согласно изученной теории.
Дана следующая функция:
fn func(num: i32) -> bool {
if num >= 0 {
return true;
} else {
return false;
}
}
Перепишите ее код в сокращенной форме согласно изученной теории.