Escribir funciones en Rust

RustRustBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprendemos cómo escribir funciones en Rust. Las funciones se declaran utilizando la palabra clave fn, y sus argumentos se anotan con su tipo. El tipo de retorno, si aplica, se especifica después de una flecha ->. La última expresión en la función sirve como valor de retorno, pero la instrucción return se puede utilizar para devolver un valor antes. El laboratorio proporciona un ejemplo de cómo reescribir el programa FizzBuzz utilizando funciones, demostrando el uso de funciones que devuelven valores booleanos, funciones que devuelven el tipo unitario () y funciones sin un tipo de retorno especificado.

Nota: Si el laboratorio no especifica un nombre de archivo, puede utilizar cualquier nombre de archivo que desee. Por ejemplo, puede utilizar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/ControlStructuresGroup(["Control Structures"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/boolean_type("Boolean Type") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/ControlStructuresGroup -.-> rust/for_loop("for Loop") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/integer_types -.-> lab-99320{{"Escribir funciones en Rust"}} rust/boolean_type -.-> lab-99320{{"Escribir funciones en Rust"}} rust/string_type -.-> lab-99320{{"Escribir funciones en Rust"}} rust/for_loop -.-> lab-99320{{"Escribir funciones en Rust"}} rust/function_syntax -.-> lab-99320{{"Escribir funciones en Rust"}} rust/expressions_statements -.-> lab-99320{{"Escribir funciones en Rust"}} rust/lifetime_specifiers -.-> lab-99320{{"Escribir funciones en Rust"}} rust/operator_overloading -.-> lab-99320{{"Escribir funciones en Rust"}} end

Funciones

Las funciones se declaran utilizando la palabra clave fn. Sus argumentos se anotan con su tipo, al igual que las variables, y, si la función devuelve un valor, el tipo de retorno debe especificarse después de una flecha ->.

La última expresión en la función se utilizará como valor de retorno. Alternativamente, la instrucción return se puede utilizar para devolver un valor antes desde dentro de la función, incluso desde dentro de bucles o instrucciones if.

¡Vamos a reescribir FizzBuzz utilizando funciones!

// A diferencia de C/C++, no hay restricción sobre el orden de las definiciones de funciones
fn main() {
    // Podemos utilizar esta función aquí, y definirlas más adelante en algún lugar
    fizzbuzz_to(100);
}

// Función que devuelve un valor booleano
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Caso especial, retorno temprano
    if rhs == 0 {
        return false;
    }

    // Esta es una expresión, la palabra clave `return` no es necesaria aquí
    lhs % rhs == 0
}

// Funciones que "no" devuelven un valor, en realidad devuelven el tipo unitario `()`
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);
    }
}

// Cuando una función devuelve `()`, el tipo de retorno se puede omitir de la
// firma
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

Resumen

¡Felicitaciones! Has completado el laboratorio de Funciones. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.