見出し画像

Rust 高階関数とは 使い方と注意点について

Rustの高階関数は関数を引数に取ったり、関数を返したりする関数です。

高階関数を使用すると、柔軟で再利用可能なコードを作成し、プログラムの構造をより抽象化できます。


高階関数の使い方

関数を引数として受け取る高階関数

高階関数は、他の関数を引数として受け取り、その関数を実行することができます。

fn apply<F>(f: F, x: i32) -> i32
where
    F: Fn(i32) -> i32,
{
    f(x)
}

fn double(n: i32) -> i32 {
    n * 2
}

fn main() {
    let result = apply(double, 5);
    println!("Result: {}", result); 
}

高階関数applyが関数doubleを引数に受け取り、xに適用してその結果を返しています。


クロージャを使った高階関数

Rustのクロージャは、関数のように動作しながら、外部の変数をキャプチャする匿名関数です。す。

fn apply_twice<F>(f: F, x: i32) -> i32
where
    F: Fn(i32) -> i32,
{
    f(f(x))
}

fn main() {
    let result = apply_twice(|x| x + 1, 5); 
    println!("Result: {}", result); // Result: 7
}

クロージャを使って関数apply_twiceに引数を渡し、クロージャを2回適用しています。


注意点

関数の型

高階関数では、引数として受け取る関数の型を明示的に指定する必要があります。
Fn、FnMut、FnOnceのようなトレイトを使って、関数の性質を定義します。


パフォーマンスの影響

高階関数は、関数の呼び出しが追加されるため、パフォーマンスに影響を与えることがあります。特にクロージャがキャプチャする変数のメモリオーバーヘッドや、関数の多重適用に注意が必要です。

Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?