雑めも
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
にする