Funções

As funções são declaras usando a palavra-chave fn. Os seus argumentos têm os tipos anotados, tal como as variáveis, e se a função retornar um valor, o tipo de retorno de ser especificado depois duma flecha (ou seta) ->.

A expressão final numa função será usada como valor de retorno. Alternativamente, a declaração de return pode ser usada para retornar um valor mais cedo a partir de dentro da função, até mesmo a partir de dentro dos laços de repetição ou declarações de if.

Vamos reescrever o FizzBuzz usando funções!:

// Diferente de C e C++,
// não existe restrição sobre a ordem de definições de função
fn main() {
// Nós podemos usar esta função,
// e defini-la em algum lugar depois
fizzbuzz_to(100);
}
// Função que retorna um valor booleano
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
// Caso extremo, retornar prematuramente
if rhs == 0 {
return false;
}
// Isto é uma expressão,
// a palavra-chave `return` não é necessária
lhs % rhs == 0
}
// As funções que "não" retornam um valor,
// na realidade retornam o tipo unitário `()`
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);
}
}
// Quando uma função retornar `()`,
// o tipo de retorno pode ser omitido da assinatura
fn fizzbuzz_to(n: u32) {
for n in 1..=n {
fizzbuzz(n);
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX