Функции
Функции объявляются с помощью ключевого слова fn. Их аргументы имеют явно заданный тип, как у переменных, и, если функция возвращает значение, возвращаемый тип должен быть указан после стрелки ->.
Последнее выражение в функции будет использовано как возвращаемое значение. Так же можно использовать оператор return, чтобы вернуть значение из функции раньше, даже из цикла или оператора if.
Давайте перепишем FizzBuzz используя функции!
// В отличие от C/C++ здесь нет ограничений на порядок определения функций
fn main() {
// Мы можем использовать функцию здесь, а определить её где-нибудь позже
fizzbuzz_to(100);
}
// Функция, которая возвращает булево значение
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
// Особый случай, ранний возврат
if rhs == 0 {
return false;
}
// Это выражение, ключевое слово `return` здесь не требуется
lhs % rhs == 0
}
// Функции которые "не" возвращают значение, на самом деле возвращают единичный тип `()`
fn fizzbuzz(n: u32) -> () {
if is_divisible_by(n, 15) {
println!("fizzbuzz");
} else if is_divisible_by(n, 3) {
println!("fizz");
} else if is_divisible_by(n, 5) {
println!("buzz");
} else {
println!("{}", n);
}
}
// Если функция возвращает `()`, тип возвращаемого значения можно не указывать
// в сигнатуре
fn fizzbuzz_to(n: u32) {
for n in 1..=n {
fizzbuzz(n);
}
}