Tal como outras linguagens, o Go também tem uma instrução switch.
As instruções switch são uma forma mais curta de escrever cadeias longas de instruções if ... else if.
Para criar um switch, começamos por usar a palavra-chave switch seguida de um valor ou de uma expressão.
Depois, declaramos cada uma das condições com a palavra-chave case.
Também podemos declarar um caso default, que é executado quando nenhuma das condições case anteriores corresponde:
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
}
Uma coisa interessante nas instruções switch é que o valor a seguir à palavra-chave switch pode ser omitido, e podemos ter condições booleanas para cada 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
}
Neste exercício vamos simular o primeiro turno de um jogo de Blackjack.
Vais receber duas cartas e vais poder ver a carta do crupiê que está virada para cima. Todas as cartas são representadas por uma string, como "ace", "king", "three", "two", etc. Os valores de cada carta são:
| carta | valor | carta | valor |
|---|---|---|---|
| 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 |
Nota: Habitualmente, os aces podem valer 1 ou 11, mas, para simplificar, vamos assumir que só podem valer 11.
Consoante as tuas duas cartas e a carta do crupiê, há uma estratégia para o primeiro turno do jogo, na qual tens as seguintes opções:
Apesar de ainda não ser a ideal, vais seguir a estratégia que o teu amigo Alex tem vindo a desenvolver, que é a seguinte:
Implementa uma função que calcule o valor numérico de uma carta:
value := ParseCard("ace")
fmt.Println(value)
// Output: 11
Escreve uma função que implemente a lógica de decisão descrita acima:
func FirstTurn(card1, card2, dealerCard string) string
Aqui ficam alguns exemplos dos resultados esperados:
FirstTurn("ace", "ace", "jack") == "P"
FirstTurn("ace", "king", "ace") == "S"
FirstTurn("five", "queen", "ace") == "H"
Inscreve-te no Exercism para aprenderes e dominares Go com 35 conceitos167 exercícios, e mentoria humana real, tudo grátis.