Funções

Uma versão em Rust da famosa pergunta de entrevistas FizzBuzz:

fn main() {
    print_fizzbuzz_to(20);
}

fn is_divisible(n: u32, divisor: u32) -> bool {
    if divisor == 0 {
        return false;
    }
    n % divisor == 0
}

fn fizzbuzz(n: u32) -> String {
    let fizz = if is_divisible(n, 3) { "fizz" } else { "" };
    let buzz = if is_divisible(n, 5) { "buzz" } else { "" };
    if fizz.is_empty() && buzz.is_empty() {
        return format!("{n}");
    }
    format!("{fizz}{buzz}")
}

fn print_fizzbuzz_to(n: u32) {
    for i in 1..=n {
        println!("{}", fizzbuzz(i));
    }
}
  • Nos referimos em main a uma função escrita abaixo. Nem declarações prévias e nem cabeçalhos são necessários.
  • Os parâmetros de declaração são seguidos por um tipo (o inverso de algumas linguagens de programação) e, em seguida, um tipo de retorno.
  • A última expressão em um corpo de uma função (ou qualquer bloco) torna-se o valor de retorno. Simplesmente omita o ; no final da expressão.
  • Algumas funções não têm valor de retorno e retornam o ‘tipo unitário’, (). O compilador irá inferir isso se o tipo de retorno -> () for omitido.
  • A expressão de intervalo no loop for em imprimir_fizzbuzz_para() contém =n, o que faz com que inclua o limite superior.