Explorando las capacidades funcionales de 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, exploramos las funciones de orden superior (HOF, por sus siglas en inglés) en Rust, que son funciones que toman una o más funciones y/o producen una función más útil, y cómo se pueden utilizar en combinación con iteradores perezosos para darle a Rust un sabor funcional.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/ControlStructuresGroup(["Control Structures"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/BasicConceptsGroup -.-> rust/mutable_variables("Mutable Variables") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") 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") subgraph Lab Skills rust/variable_declarations -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/mutable_variables -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/integer_types -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/string_type -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/for_loop -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/function_syntax -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/expressions_statements -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} rust/lifetime_specifiers -.-> lab-99330{{"Explorando las capacidades funcionales de Rust"}} end

Funciones de Orden Superior

Rust proporciona Funciones de Orden Superior (HOF, por sus siglas en inglés). Estas son funciones que toman una o más funciones y/o producen una función más útil. Las HOF y los iteradores perezosos le dan a Rust su sabor funcional.

fn is_odd(n: u32) -> bool {
    n % 2 == 1
}

fn main() {
    println!("Encuentra la suma de todos los números impares al cuadrado menores que 1000");
    let upper = 1000;

    // Enfoque imperativo
    // Declara la variable acumuladora
    let mut acc = 0;
    // Itera: 0, 1, 2,... hasta el infinito
    for n in 0.. {
        // Eleva el número al cuadrado
        let n_squared = n * n;

        if n_squared >= upper {
            // Rompe el bucle si se ha excedido el límite superior
            break;
        } else if is_odd(n_squared) {
            // Acumula el valor, si es impar
            acc += n_squared;
        }
    }
    println!("estilo imperativo: {}", acc);

    // Enfoque funcional
    let sum_of_squared_odd_numbers: u32 =
        (0..).map(|n| n * n)                             // Todos los números naturales al cuadrado
            .take_while(|&n_squared| n_squared < upper) // Por debajo del límite superior
            .filter(|&n_squared| is_odd(n_squared))     // Que son impares
            .sum();                                     // Súmalos
    println!("estilo funcional: {}", sum_of_squared_odd_numbers);
}

Option e Iterator implementan su parte justa de HOF.

Resumen

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