関数型メソッドを作ってみる
お久しぶりです。
- 前書き
現在は社内開発を離れて、出向先でJAVAを扱うようになったので、久しくGoを書いていませんでした。
Goを触っていた時に、関数型のメソッドって作れるのかな?と思い、実際に書いてみました。
- コード
package main
import "fmt"
type addt func(n1, n2 int) int
func main() {
addT := addt(add)
fmt.Println(addT.multi(1, 4))
}
// 和計算
func add(n1, n2 int) int {
return n1 + n2
}
// 積計算
func (f addt) multi(n1, n2 int) int {
return f(n1, n2) * 2
}
- 結果
10
- 解説
解説することもありませんが、Goは静的型付け言語であり、自分でさまざまな型(type)を定義することができます。
もちろん関数も例外ではありません。
コードでは、ただの関数add()を自分で定義したaddtにキャストしています。
後は、addで引数を足し算した結果を返し、メソッドで掛け算した結果を返しています。
- 補足
別の書き方だと
fn := add
var ft addt
ft = fn
addT := ft
こんな風に書けたりしますが、個人的にちょっと余長な気がします。
addT := addt(add)
new()でインスタンス化させようしてもnil pointerで死ぬのでnew()は使わないように注意が必要です。
ちなみに、ポインタで宣言して渡そうとしてもtypeエラーでコンパイルが通らないのでそちらも駄目そうですね。
なにか対処方があれば教えて頂けると幸いです。
- あとがき
久しぶりにこう言った文章を書いたので、読みにくかったりグタグタと感じてしまったら、申し訳ありません。
現状、出戻りしない限りはGoを仕事で使う機会には恵まれそうにないですね。
やっぱり、Goを書くのは他の言語に比べて、個人的に楽しく感じますね。
netで探さなくても、ある程度自分で自由に書けるところが気に入っています。