Alex_23drumさんのSwiftで関数のカリー化(currying)入門という記事を読んで、興味がそそられたのでGO言語に置き換えてみました。
※タイトルは、当該記事をリスペクトさせて頂きました。
カリー化についての説明は、Alex_23drumさんの記事に書かれているので、作成したコードのみ載せたいと思います。
コード
サンプルは、1+1を計算するコードです。
4.は、コードを書いているうちに思いついたので付け足して見ました。
- 足し算した結果
- 2つの引数を取るメソッド
- カリー化したメソッド(1)
- カリー化したメソッド(2)
package main
import (
"fmt"
)
func main() {
fmt.Println("1+1=", 1+1) // 1. 足し算した結果
fmt.Println("1+1=", add(1, 1)) // 2. 2つの引数を取るメソッド
add1 := cadd(1)
fmt.Println("1+1=", add1(1)) // 3. カリー化したメソッド(1)
fmt.Println("1+1=", cadd(1)(1)) // 4. カリー化したメソッド(2)
}
func add(x, y int) int {
return x + y
}
func cadd(x int) func(int) int {
return func(y int) int { return x + y }
}