囲碁の「スイッチ」声明
17130 ワード
switch文はプログラミングにおいて重要な概念であり,条件実行のために使用される.Goのswitch文は他のプログラミング言語に比べて少し違います.したがって、このブログでは、意味のある例の助けを借りてgoのswitch文を理解するつもりです.
始める
次の例を見てみましょう
注意:
使用
また、他のプログラミング言語と同様に
複数の式
コンマで区切られた複数の式を持つこともできます.case式のいずれかがスイッチ式に一致する場合、その特定のケースに関連付けられたステートメントが実行されます.
スイッチ初期化器
次のように、スイッチ初期化子を持つこともできます.
無表情スイッチ
スイッチを入れる式を指定しないと、デフォルト値はブール値
型スイッチ
型スイッチは値よりむしろ型を比較します.それ以外の式スイッチに似ています.次の例を見てください.
始める
次の例を見てみましょう
package main
import "fmt"
func main() {
fruit := "Orange"
switch fruit {
case "Apple":
fmt.Printf("%v is a nice fruit\n", fruit)
case "Mango":
// We can have multiple lines of code inside case
out := fmt.Sprintf("%v is a nice fruit", fruit)
fmt.Println(out)
case "Guava":
// By default there's NO fall through
fmt.Printf("%v is a nice fruit\n", fruit)
case "Orange":
fmt.Printf("%v is a nice fruit\n", fruit)
default:
fmt.Println("Unrecognized fruit")
}
}
上記のコードスニペットの出力を推測できますか?あなたが他のプログラミング言語でswitch文を使用したならば、あなたはおそらく以下を推測しましたMango is a nice fruit
Mango is a nice fruit
Mango is a nice fruit
Unrecognized fruit
しかし、それはgoの場合ではありません.ここではswitch文では、デフォルトではフォールアウトしていません(基本的には、該当する場合はすべてのケースを実行することを意味します).goでは、一致した場合の文だけが実行されるので、出力は単にMango is a nice fruit
.注意:
switch expression == case expression
有効な比較でなければならないので、以下のコードはエラーを与えます.package main
import "fmt"
func main() {
num := "Two"
switch num {
case 2:
fmt.Printf("Num is 2")
default:
fmt.Println("Num is not 2")
}
}
使用
fallthrough
私たちが何をしたいのかについては、そのためには、fallthrough
キーワード.したがって、以下のコードは、我々が以前に推測した出力を与えます.package main
import "fmt"
func main() {
fruit := "Mango"
switch fruit {
case "Apple":
fmt.Printf("%v is a nice fruit\n", fruit)
case "Mango":
out := fmt.Sprintf("%v is a nice fruit", fruit)
fmt.Println(out)
fallthrough
case "Guava":
fmt.Printf("%v is a nice fruit\n", fruit)
fallthrough
case "Orange":
fmt.Printf("%v is a nice fruit\n", fruit)
fallthrough
default:
fmt.Println("Unrecognized fruit")
}
}
指定しなければならないことに注意してくださいfallthrough
複数の回だけ出力を取得するので、Fallthroughは次のケースブロックを実行します(ブロックが真か偽かに関係なく)、すべての以降のケースブロックを実行します.また、他のプログラミング言語と同様に
default
ケースはオプションで、他のいかなるケースもマッチしないときに引き起こされます(デフォルトのケースは、まさしくまさしくその底で必ずしもそうではありません)複数の式
コンマで区切られた複数の式を持つこともできます.case式のいずれかがスイッチ式に一致する場合、その特定のケースに関連付けられたステートメントが実行されます.
package main
import "fmt"
func main() {
fruit := "Onion";
switch fruit {
case "Apple", "Mango", "Guava":
fmt.Println("Fruit")
case "Potato", "Cabbage", "Onion":
fmt.Println("Vegetable")
default:
fmt.Println("What is it?")
}
}
// OUTPUT
// Vegetable
今まで私はスイッチとケース式でリテラル値を使用していますが、それは唯一の可能性ではありません.以下の例を見てみましょうpackage main
import "fmt"
func main() {
fruit := "Onion"
switch fruit + "s" {
case "Apple" + "s", "Mango" + "es":
fmt.Println("Fruits")
case "Cabbage" + "s", "Onion" + "s":
fmt.Println("Vegetables")
default:
fmt.Println("What is it?")
}
}
// OUTPUT
// Vegetables
スイッチ初期化器
次のように、スイッチ初期化子を持つこともできます.
package main
import "fmt"
func main() {
switch fruit := "Onion"; fruit{
case "Apple", "Mango":
fmt.Println("Fruit")
case "Cabbage", "Onion":
fmt.Println("Vegetable")
default:
fmt.Println("What is it?")
}
}
現在変数fruit
スイッチブロック内でのみ使用できます.main
関数.無表情スイッチ
スイッチを入れる式を指定しないと、デフォルト値はブール値
true
そして現在、プログラムはtrue
そしてこれはif-else-if-else
チェーン.package main
import "fmt"
func main() {
for i := 1; i <= 30; i++ {
switch {
case i%15 == 0:
fmt.Println(i, "Baz")
case i%3 == 0:
fmt.Println(i, "Foo")
case i%5 == 0:
fmt.Println(i, "Bar")
default:
// default is optional
fmt.Println(i)
}
}
}
型スイッチ
型スイッチは値よりむしろ型を比較します.それ以外の式スイッチに似ています.次の例を見てください.
package main
import "fmt"
func main() {
var num interface{} = "Hello, World"
switch num.(type) {
case int:
fmt.Printf("num is of type int")
case bool:
fmt.Printf("num is of type bool")
case string:
fmt.Printf("num is of type string")
}
}
// OUTPUT
// num is of type string
それで、私たちが今、スイッチ文がどのように働いているかについての明確な理解があることを願っています.Reference
この問題について(囲碁の「スイッチ」声明), 我々は、より多くの情報をここで見つけました https://dev.to/somshekhar/switch-statements-in-go-3e7mテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol