← 解説「クロージャ — その場で作る無名関数」に戻る
サンプルコードで身につける: クロージャ — その場で作る無名関数
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1変数に入れて呼ぶ無名関数
|引数| 式 の形で書いたクロージャを変数に入れ、普通の関数と同じように呼ぶ最小の例です。fn と違って関数定義を別の場所に書く必要がなく、使う場所のすぐそばにロジックを置けます。まずは「関数を値として変数に入れている」という感覚をつかんでください。
Rust
2周囲の変数を捕捉する
クロージャは定義された場所にある変数(ここでは tax_rate と greeting)を取り込んで使えます。これが fn との最大の違いで、引数として渡さなくても「環境ごと」ロジックを持ち運べます。設定値を覚えた変換処理を作る、というクロージャの中心的な使い方です。
Rust
3捕捉した変数を書き換えるカウンタ
クロージャは周囲の変数を読むだけでなく、書き換えることもできます。その場合はクロージャ自体にも mut が必要で、可変参照のルール(同時に1つだけ)がそのまま適用されます。呼ぶたびに状態が進むカウンタや採番処理は、この形の典型例です。
Rust
4クロージャを引数として受け取る関数
Fn(i32) -> i32 という形のトレイト境界を付けると、関数がクロージャを引数として受け取れます。apply_twice は「2回適用する」という骨組みだけ持ち、何をするかは呼び出し側がクロージャで注入します。前レッスンのトレイト境界が、クロージャの受け渡しの土台になっていることが分かる例です。
Rust
5セール設定を覚えた価格変換
割引率という設定値を捕捉したクロージャを1つ作り、複数の価格にループで適用する例です。「設定は1か所で捕捉し、変換ロジックは使う場所のそばに置く」という実務での使われ方に近い形です。次のレッスンのイテレータと組み合わせると、このループはさらに簡潔になります。
Rust