Introdução
Neste laboratório, aprendemos a escrever funções em Rust. As funções são declaradas usando a palavra-chave fn, e seus argumentos são anotados com tipos. O tipo de retorno, se aplicável, é especificado após uma seta ->. A expressão final na função serve como o valor de retorno, mas a instrução return pode ser usada para retornar um valor mais cedo. O laboratório fornece um exemplo de reescrita do programa FizzBuzz usando funções, demonstrando o uso de funções que retornam valores booleanos, funções que retornam o tipo unitário () e funções sem tipos de retorno especificados.
Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar
main.rs, compilar e executá-lo comrustc main.rs && ./main.
Funções
As funções são declaradas usando a palavra-chave fn. Seus argumentos são anotados com tipos, assim como as variáveis, e, se a função retorna um valor, o tipo de retorno deve ser especificado após uma seta ->.
A expressão final dentro da função será usada como valor de retorno. Alternativamente, a instrução return pode ser usada para retornar um valor mais cedo dentro da função, mesmo dentro de loops ou instruções if.
Vamos reescrever FizzBuzz usando funções!
// Ao contrário de C/C++, não há restrição na ordem das definições de funções
fn main() {
// Podemos usar esta função aqui, e defini-la em outro lugar mais tarde
fizzbuzz_to(100);
}
// Função que retorna um valor booleano
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
// Caso especial, retorno antecipado
if rhs == 0 {
return false;
}
// Esta é uma expressão, a palavra-chave `return` não é necessária aqui
lhs % rhs == 0
}
// Funções que "não" retornam um valor, na verdade 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 retorna `()`, o tipo de retorno pode ser omitido da
// assinatura
fn fizzbuzz_to(n: u32) {
for n in 1..=n {
fizzbuzz(n);
}
}
Resumo
Parabéns! Você concluiu o laboratório de Funções. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.