Як й інші мови, Go також надає конструкцію switch.
Конструкції switch дають змогу коротше записати довгі конструкції if ... else if.
Щоб створити конструкцію switch, ми починаємо з ключового слова switch, після якого йде значення або вираз.
Потім ми оголошуємо кожну з умов за допомогою ключового слова case.
Ми також можемо оголосити випадок default, який виконається, коли жодна з попередніх умов case не збіглася:
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 можна використовувати булеві умови (англ. Boolean):
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
}
У цій вправі ми змоделюємо перший хід гри в блекджек.
Ми отримаємо дві карти та зможемо побачити відкриту карту дилера. Усі карти представлені рядком тексту (англ. string), наприклад «ace», «king», «three», «two» тощо. Значення кожної карти такі:
| карта | значення | карта | значення |
|---|---|---|---|
| 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.
Залежно від наших двох карт і карти дилера, існує стратегія для першого ходу гри, у якій ми маємо такі варіанти:
Хоча вона ще не оптимальна, ми будемо дотримуватися стратегії, яку розробив наш друг Алекс, а саме:
Реалізуйте функцію для обчислення числового значення карти:
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"
Зареєструйтеся на Exercism, щоб вивчати й опановувати Go, а також 35 концепцій167 вправ та справжнє наставництво від людей, і все це безкоштовно.