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çãofn main() {// Nós podemos usar esta função,// e defini-la em algum lugar depoisfizzbuzz_to(100);}// Função que retorna um valor booleanofn is_divisible_by(lhs: u32, rhs: u32) -> bool {// Caso extremo, retornar prematuramenteif rhs == 0 {return false;}// Isto é uma expressão,// a palavra-chave `return` não é necessárialhs % 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 assinaturafn fizzbuzz_to(n: u32) {for n in 1..=n {fizzbuzz(n);}}