Logo

Developer learning path

Rust

Higher Order Functions in Rust

Higher Order Functions

74

#description

In Rust, functions are first-class citizens, which means that they can be treated just like any other value. Higher-order functions are functions that accept other functions as arguments or return functions as results, just like any other value. In other words, a higher-order function can be considered as a function that operates on other functions.

In Rust, higher-order functions provide a powerful and flexible way to write generic code that can work with different types of functions. They can be used to create abstractions over common patterns in code, such as mapping over a collection, filtering items based on a predicate, reducing a collection to a single value, and many more.

For example, Rust provides built-in higher-order functions such as map, filter, and fold that operate on collections like vectors and arrays. These functions take a closure or function as an argument, and apply that function to each item in the collection.

Here’s an example:

                    
fn main() {
    let numbers = vec![1, 2, 3, 4, 5];

    // Using the `map` higher-order function to double each number
    let doubled_numbers = numbers.iter().map(|x| x * 2).collect::<Vec<_>>();

    // Using the `filter` higher-order function to keep only even numbers
    let even_numbers = numbers.iter().filter(|x| x % 2 == 0).collect::<Vec<_>>();
}
                  

In this example, we’re using the map function to double each number, and the filter function to keep only the even numbers. These functions take a closure, which is a short, anonymous function that defines the specific behavior needed by the higher-order function.

Overall, higher-order functions are a powerful feature in Rust that enable flexible, generic, and reusable code that can operate on a wide range of functions and data types, making Rust a highly expressive and capable programming language.

March 27, 2023

If you don't quite understand a paragraph in the lecture, just click on it and you can ask questions about it.

If you don't understand the whole question, click on the buttons below to get a new version of the explanation, practical examples, or to critique the question itself.