Funções de Ordem Superior
A Rust fornece Funções de Ordem Superior (HOF, sigla em Inglês). Estas são funções que recebem um ou mais funções e ou produzem uma função mais útil. As funções de ordem superior e iteradores preguiçosos dão à Rust o seu sabor funcional:
fn is_odd(n: u32) -> bool {n % 2 == 1}fn main() {println!("Find the sum of all the squared odd numbers under 1000");let upper = 1000;// Abordagem imperativa// Declarar variável acumuladoralet mut acc = 0;// Iterar: 0, 1, 2, ... à infinitofor n in 0.. {// Fazer a quadratura do númerolet n_squared = n * n;if n_squared >= upper {// Quebrar o laço se excedido o limite superiorbreak;} else if is_odd(n_squared) {// Acumular o valor, se for ímparacc += n_squared;}}println!("imperative style: {}", acc);// Abordagem funcionallet sum_of_squared_odd_numbers: u32 =(0..).map(|n| n * n) // Todos os números naturais ao quadrado.take_while(|&n_squared| n_squared < upper) // Abaixo do limite superior.filter(|&n_squared| is_odd(n_squared)) // Que são ímpares.sum(); // Some-osprintln!("functional style: {}", sum_of_squared_odd_numbers);}
Option e Iterator implementam a sua parte clara de funções de ordem superior.