Funciones

Una versión de Rust de la famosa pregunta de la entrevista de 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));
    }
}
  • En main hacemos referencia a una función escrita más abajo. No se necesitan declaraciones de redirección ni encabezados.
  • Los parámetros de declaración van seguidos de un tipo (al contrario que en algunos lenguajes de programación) y, a continuación, de un tipo de resultado devuelto.
  • La última expresión del cuerpo de una función (o de cualquier bloque) se convierte en el valor devuelto. Basta con omitir el carácter ; al final de la expresión.
  • Algunas funciones no devuelven ningún valor, devuelven el “tipo unitario”, (). El compilador deducirá esto si se omite el tipo de retorno -> ().
  • La expresión de intervalo del bucle for en print_fizzbuzz_to() contiene =n, lo que hace que incluya el límite superior.