0
0

Go | 同じ名前の関数で引数の数を変える

Posted at

雑めも

f.SearchSheet(sheet, kw, true)

f.SearchSheet(sheet, kw)

が許容されてるのに気づいたのでメモ

末尾に1つ要素の有無をコントロールする

package main

import (
	"fmt"
)

func main() {
	// opt arg なし
	fmt.Println(">> no opt arg")
	f1(":D")
	fmt.Println()

	// false
	fmt.Println(">> false")
	f1(":D", false)
	fmt.Println()

	// true
	fmt.Println(">> true")
	f1(":D", true)
	fmt.Println()

	// invalid
	fmt.Println(">> invalid")
	f1(":D", false, false) // 複数入れられちゃうけど意味がない
	fmt.Println()
}

func f1(txt string, arg ...bool) {
	if len(arg) > 1 {
		fmt.Println("<invalid arg>")
		return
	}
	willUpdate := len(arg) > 0 && arg[0]

	fmt.Println(txt, "f1 starting...")
	if willUpdate {
		// 何かupdate 処理
		fmt.Println(txt, "f1 update!")
	}
	fmt.Println(txt, "f1 done...")
}

末尾にN個の要素を追加する

同じノリでロジックを拡張する

package main

import (
	"fmt"
)

func main() {
	// Update / noDelete
	fmt.Println(">> Update / no Delete")
	f1(":D", true, false)
	fmt.Println()

	// no Update / Delete
	fmt.Println(">> no Update / Delete")
	f1(":D", false, true)
	fmt.Println()
}

func f1(txt string, arg ...bool) {
	if len(arg) > 2 {
		fmt.Println("<invalid arg>")
		return
	}
	willUpdate := len(arg) > 0 && arg[0]
	willDelete := len(arg) > 1 && arg[1]

	fmt.Println(txt, "f1 starting...")
	if willUpdate {
		// 何かupdate 処理
		fmt.Println(txt, "f1 UPDATE!")
	}

	if willDelete {
		// 何かupdate 処理
		fmt.Println(txt, "f1 DELETE!")
	}
	fmt.Println(txt, "f1 done...")
}

Functional Option Pattern

型が違ったりロジックが多くなってきたら Functional Option Pattern にする

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