Translate

sábado, 1 de julio de 2023

Funciones en Rust



Una versión de Rust de la famosa pregunta de 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));

    }

}


$ cargo run

   Compiling hello_cargo v0.1.0 

    Finished dev [unoptimized + debuginfo] target(s) in 0.38s

     Running `target/debug/hello_cargo`

1

2

fizz

4

buzz

fizz

7

8

fizz

buzz

11

fizz

13

14

fizzbuzz

16

17

fizz

19

buzz


Los parámetros de declaración son seguidos por un tipo (lo contrario de algunos lenguajes de programación), luego un tipo de retorno.

La última expresión en el cuerpo de una función (o cualquier bloque) se convierte en el valor devuelto. Y Simplemente se omite el ; al final de la expresión.

Algunas funciones no tienen valor de retorno y devuelven el 'tipo de unidad', (). El compilador inferirá esto si se omite el tipo de retorno -> ().

La expresión de rango en el ciclo for en print_fizzbuzz_to() contiene =n, lo que hace que incluya el límite superior.