LoginSignup
2
1

More than 5 years have passed since last update.

golang switchの共通処理、ifの特殊(変)な書き方

Posted at

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版

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否定版(処理内容は同じ)

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")
  }
}

インデントはgofmt準拠ですが、ちょっと違和感がある箇所もありますね。switchは、否定版の,(カンマ)区切りの方が違和感のないインデントでした。

どちらもあくまで追加変更がしやすい特殊な書き方なので、読みやすさは度外視です。
むやみに使わないこと、他人に見せるコードには使わないこと、忘れないよう適切なコメントを入れること。

2
1
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
2
1