自由気ままにブログ

地方零細企業プログラマがひっそりとなにかしています。

関数型メソッドを作ってみる

お久しぶりです。

f:id:nono138:20200421225917p:plain

  • 前書き

現在は社内開発を離れて、出向先でJAVAを扱うようになったので、久しくGoを書いていませんでした。

Goを触っていた時に、関数型のメソッドって作れるのかな?と思い、実際に書いてみました。

 

  • コード
package main

import "fmt"

type addt func(n1, n2 intint

func main() {
    addT := addt(add)
    fmt.Println(addT.multi(14))
}

// 和計算
func add(n1, n2 intint {
    return n1 + n2
}

// 積計算
func (f addt) multi(n1, n2 intint {
    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で探さなくても、ある程度自分で自由に書けるところが気に入っています。