Skip to content

Latest commit

 

History

History
195 lines (156 loc) · 4.09 KB

6.10.md

File metadata and controls

195 lines (156 loc) · 4.09 KB

セクション 6.10 条件 - switch文

このセクションではswitch文を見ていきます。制御構造の一部です。

プログラムはデフォルトではシーケンシャルに動作します。しかし、forを使って繰り返しをしたり、ifswitchを使って条件を用いて制御することができます。

switch文はつねにswitchというキーワードから始まります。「何かのスイッチを入れる」みたいにとらえると良いと思います。

swtichキーワードに加えて、switch文にはcaseがあります。switch文にはいくつかcaseがあります。

package main

import (
	"fmt"
)

func main() {
	switch {
	case false:
		fmt.Println("出力されない")
	case (2 == 4):
		fmt.Println("出力されない2")
	case (3 == 3):
		fmt.Println("出力される")
	case (4 == 4):
		fmt.Println("これも真だけど出力されるかな?")
	}
}

playground

上の例では、最初に真となるcase3 == 3なので、fmt.Println("出力される")が実行されます。Goのswitch文のデフォルトではフォールスロー(fallthrough)がされません。これにより、4 == 4caseは実行されません。fallthroughを記述してどうなるか見てみましょう。

package main

import (
	"fmt"
)

func main() {
	switch {
	case false:
		fmt.Println("出力されない")
	case (2 == 4):
		fmt.Println("出力されない2")
	case (3 == 3):
		fmt.Println("出力される")
		fallthrough
	case (4 == 4):
		fmt.Println("これも真だけど出力されるかな?")
	}
}

playground

fallthroughを記述したことにより、最後の4==4も実行されました。fallthroughを使えば各文を評価させることができるようになります。

package main

import (
	"fmt"
)

func main() {
	switch {
	case false:
		fmt.Println("出力されない")
	case (2 == 4):
		fmt.Println("出力されない2")
	case (3 == 3):
		fmt.Println("出力される")
		fallthrough
	case (4 == 4):
		fmt.Println("これも真だけど出力されるかな?")
		fallthrough
	case (7 == 9):
		fmt.Println("真でない1")
		fallthrough
	case (11 == 14):
		fmt.Println("真でない2")
		fallthrough
	case (15 == 15):
		fmt.Println("真15")
	}
}

playground

しかし、一般的に言ってfallthroughは使わないほうが良いでしょう。

他に真となるcaseがなかったときに評価されるdefaultもあります。

package main

import (
	"fmt"
)

func main() {
	switch {
	case false:
		fmt.Println("this should not print")
	case (2 == 4):
		fmt.Println("this should not print2")
	default:
	 	fmt.Println("this is default")
	}
}

playground

なんらかの値とともにswitch文を始めたときは、その値と等しいかを評価します。

package main

import (
	"fmt"
)

func main() {
	switch "Bond" {
	case "Moneypenny":
		fmt.Println("miss money")
	case "Bond":
		fmt.Println("bond james")
	case "Q":
		fmt.Println("This is q")
	default:
	 	fmt.Println("this is default")
	}
}

playgound

switch文にハードコードするより、変数を使ったほうが良いでしょう。

package main

import (
	"fmt"
)

func main() {
	n := "Bond"
	switch n {
	case "Moneypenny":
		fmt.Println("miss money")
	case "Bond":
		fmt.Println("bond james")
	case "Q":
		fmt.Println("This is q")
	default:
	 	fmt.Println("this is default")
	}
}

playground

caseに複数の値を書くこともできます。

package main

import (
	"fmt"
)

func main() {
	n := "Bond"
	switch n {
	case "Moneypenny", "Bond", "Dr No":
		fmt.Println("miss money or bond or dr no")
	case "M":
		fmt.Println("m")
	case "Q":
		fmt.Println("This is q")
	default:
	 	fmt.Println("this is default")
	}
}

playground