他の言語と同じく、Goにもswitch文が用意されています。
switch文を使うと、長いif ... else if文を短く書けます。
switch文を作るには、まずキーワードswitchを使い、その後に値または式を書きます。
次に、それぞれの条件をキーワードcaseで宣言します。
また、それまでのどのcase条件にも一致しなかったときに実行されるdefaultケースを宣言することもできます:
operatingSystem := "windows"
switch operatingSystem {
case "windows":
// do something if the operating system is windows
case "linux":
// do something if the operating system is linux
case "macos":
// do something if the operating system is macos
default:
// do something if the operating system is none of the above
}
switch文の面白いところは、キーワードswitchの後ろの値を省略できることと、各caseに真偽値の条件を指定できることです:
age := 21
switch {
case age > 20 && age < 30:
// do something if age is between 20 and 30
case age == 10:
// do something if age is equal to 10
default:
// do something else for every other case
}
この演習では、ブラックジャックのゲームの最初のターンをシミュレートします。
2枚のカードを受け取り、ディーラーの表向きのカードを見ることができます。 すべてのカードは、"ace"や"king"、"three"、"two"などの文字列で表されます。 各カードの数値は次のとおりです。
| card | value | card | value |
|---|---|---|---|
| ace | 11 | eight | 8 |
| two | 2 | nine | 9 |
| three | 3 | ten | 10 |
| four | 4 | jack | 10 |
| five | 5 | queen | 10 |
| six | 6 | king | 10 |
| seven | 7 | other | 0 |
注意:一般に、aceは1または11の値を取ることができますが、簡単のため、ここでは11の値だけを取るものとします。
手持ちの2枚のカードとディーラーのカードに応じて、ゲームの最初のターンには戦略があり、次の選択肢から選びます。
まだ最適とは言えませんが、ここでは友人のAlexが開発してきた戦略に従います。その戦略は次のとおりです。
カードの数値を計算する関数を実装してください:
value := ParseCard("ace")
fmt.Println(value)
// Output: 11
上で説明した判断ロジックを実装する関数を書いてください:
func FirstTurn(card1, card2, dealerCard string) string
期待される結果の例をいくつか示します:
FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"