関数の中の関数「クロージャ」とは?初心者向けにやさしく解説!
プログラミングを学んでいると出てくる「クロージャ(Closure)」。
関数の中で関数を作ることで、変数を“閉じ込めて”記憶させる仕組みです。
今回は、クロージャの仕組みや使い方を、初心者にもわかりやすく解説します。
クロージャ(Closure)とは?
クロージャとは、関数の内部で定義された関数が、外側の関数の変数を覚えている状態のことです。
「関数の中で定義された関数 + そのときのスコープ(変数の情報)」をセットで保持します。
Pythonでのクロージャの例
def make_greeting(name):
def greet():
print("こんにちは、" + name + "さん!")
return greet
hello_yamada = make_greeting("山田")
hello_yamada() # 実行結果:こんにちは、山田さん!
greet()
関数はすでにmake_greeting()
の処理が終わった後でも、name
の値を覚えています。
この状態が「クロージャ」です。
クロージャの仕組み
- 外側の関数が実行されると、内側の関数が定義される
- 内側の関数は、外側の変数を覚えたまま返される
- 外側の関数が終了しても、変数はクロージャに保存される
クロージャを使うメリット
- 関数ごとに独立した状態(値)を持てる
- データを隠して安全に扱える(カプセル化)
- 一部の変数だけを固定しつつ再利用できる
クロージャに関する注意点
注意点 |
説明 |
スコープの理解が必要 |
ローカル変数とグローバル変数の違いを把握しておく |
メモリに残り続ける |
必要のないクロージャを作りすぎるとメモリを消費する |
クロージャを活用する場面
- 関数ベースのイベント処理
- コールバック関数に状態を持たせたいとき
- オブジェクトを使わずにデータを保持したいとき
まとめ
クロージャとは、関数内で定義された関数が、外の変数を記憶して使い続ける仕組みです。
スコープと関数の関係を活用した、少し高度なテクニックですが、慣れてくると便利な場面がたくさんあります。
初心者の方も、まずは「関数の中に関数を作る」ことから体験してみましょう!