← Go コース
35. 第一級関数 — 関数を値として扱う
Go では関数も値の一種(第一級オブジェクト)です。変数に代入したり、引数として他の関数に渡したり、戻り値として返したりできます。関数の型は func(int) int のように引数と戻り値の型で表され、この型を持つ変数に関数を入れて、後から呼び出せます。
関数を引数に取る関数を「高階関数」と呼びます。たとえば下の apply は、整数と「整数を受け取って整数を返す関数」を受け取り、その関数を値に適用します。これにより、処理の一部を呼び出し側から差し替えられる柔軟な設計ができます。標準ライブラリの sort.Slice なども、比較ロジックを関数として受け取る高階関数です。
関数を値として渡せることは、前に学んだクロージャと組み合わせると特に強力です。状態を閉じ込めた関数を生成して引数として渡す、といった書き方ができ、コールバックやフィルタ処理などを簡潔に表現できます。「関数もデータのように扱える」という感覚をつかんでおきましょう。
▶ サンプルコードを実行してみよう(自由に書き換えてOK)
Go