golang
switchやifの追加や変更がしやすい書き方について紹介します。
switchの共通処理
gotoを使うことで簡単に共通処理を書くことができます。
switch i{
case 0:
case 1:
case 2:
default:
goto skip
}
//ここに共通処理
skip:
こうします。
ifの場合は最後のelseにgotoを書いて同じようにします。
switch文では処理のないcaseを追加するだけで共通処理が実行されるので、ifよりも活用しやすいです。
実用例
switch e.Code{
case key.CodeUpArrow:
relY -= 0.1
case key.CodeDownArrow:
relY += 0.1
case key.CodeLeftArrow:
relX += 0.1
case key.CodeRightArrow:
relX -= 0.1
default:
goto none
}
//画面更新イベント送信
win.Send(size.Event{WidthPx:rc.width, HeightPx:rc.height})
none:
if/switchの特殊(変)な書き方
if true &&
true &&
false{
//処理
}
実用例
変更前
if nameF || direF{
if dFlag{
if namesub.check(v.Name()){
if diresub.checkContain(path){
if lineF{
fmt.Println(pathFormat(v, path) + "\n")
}else{
fmt.Println("not found")
}
}
}
}
}
if nameF || direF &&
dFlag &&
namesub.check(v.Name()) &&
diresub.checkContain(path){
lineF{
fmt.Println(pathFormat(v, path) + "\n")
}else{
fmt.Println("not found")
}
}
switch{
case
nameF || direF &&
dFlag &&
namesub.check(v.Name()) &&
diresub.checkContain(path):
if lineF{
fmt.Println(pathFormat(v, path) + "\n")
}else{
fmt.Println("not found")
}
}
switch false{
case
nameF || direF,
dFlag,
namesub.check(v.Name()),
diresub.checkContain(path):
default:
if lineF{
fmt.Println(pathFormat(v, path) + "\n")
}else{
fmt.Println("not found")
}
}
どちらもあくまで追加変更がしやすい特殊な書き方なので、読みやすさは度外視です。
むやみに使わないこと、他人に見せるコードには使わないこと、忘れないよう適切なコメントを入れること。