Go

【Go】関数型の宣言

関数も型定義できます。

同じ型であることの条件

関数は以下が同じであれば、同じ型となります。これを関数のシグネチャーと呼びます。

  • 引数の数と型
  • 戻り値の数と型

定義

以下のようにtypeキーワードを使用して関数の型を定義出来ます。

// 関数タイプ定義
type myFuncType func(int, int) int

使用例

以下のように関数型を使用して、ポリモーフィズムのような使い方が出来ます。
足し算と引き算を行います。

package main

import (
	"fmt"
)

// 関数タイプ定義
type myFuncType func(int, int) int

// 計算構造体定義
type myStructType struct {
	arg1   int
	arg2   int
	result myFuncType
}

func main() {

	// 足し算
	calc := myStructType{
		arg1:   1,
		arg2:   1,
		result: addFunc,
	}
	fmt.Println(calculation(calc)) // 2 が表示される。

	// 引き算
	calc = myStructType{
		arg1:   1,
		arg2:   1,
		result: subFunc,
	}
	fmt.Println(calculation(calc)) // 0 が表示される。
}

// 足し算関数
func addFunc(arg1, arg2 int) int {
	return arg1 + arg2
}

// 引き算関数
func subFunc(arg1, arg2 int) int {
	return arg1 - arg2
}

// 計算関数
func calculation(my myStructType) int {
	return my.result(my.arg1, my.arg2)
}

ただし、このような使い方が良いのかは不明です。

コメントを残す

メールアドレスが公開されることはありません。

© DeNnie.Lab All Rights Reserved.