0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語(Golang)における関数とクロージャ

Posted at

1. 関数の定義と利用

func makeMult(base int) func(int) int {
    return func(factor int) int {
        return base * factor
    }
}
  • makeMult関数:
    • makeMultは引数として整数baseを受け取ります。この関数は、factorという整数を引数に持つ無名関数(匿名関数)を返します。
    • この無名関数は、basefactorの積を計算して返します。

2. クロージャの特性

クロージャとは、関数とその関数が定義された環境(スコープ)を束ねたものです。このコードでは、makeMultが返す無名関数は、baseという変数を「閉じ込めて」います。

  • クロージャの動作:
    • makeMultが呼ばれると、新しい無名関数が生成され、baseの値がその関数に保存されます。
    • この無名関数は、makeMultのスコープを超えてもbaseにアクセスできます。

3. 実際の動作

twoBase := makeMult(2)   // 2倍する関数
threeBase := makeMult(3) // 3倍する関数
  • twoBaseにはbaseが2の無名関数が代入され、threeBaseにはbaseが3の無名関数が代入されます。
  • これにより、twoBaseを呼び出すと2倍、threeBaseを呼び出すと3倍の計算が行われます。

4. ループ内での利用

for i := 0; i <= 5; i++ {
    fmt.Print(i, ": ", twoBase(i), ", ", threeBase(i), "\n")
}
  • このループでは、iが0から5までの値を取り、各値に対してtwoBasethreeBaseを呼び出しています。
  • それぞれ、baseが2または3に設定された無名関数が呼び出され、iに基づく計算結果が表示されます。

まとめ

  • 関数: makeMultは他の関数を生成するための関数で、特定の動作(乗算)を定義しています。
  • クロージャ: makeMultが返す無名関数は、baseという変数を閉じ込めており、呼び出したときにその値を利用できます。これにより、異なる基数での乗算を簡単に実現できます。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?