Trilhas
/
Elixir
Elixir
/
Exercícios
/
Jogo de adivinhação
Jogo de adivinhação

Jogo de adivinhação

Exercício de aprendizagem

Introdução

Funções com Múltiplas Cláusulas

O Elixir facilita práticas do Princípio Aberto-Fechado ao permitir que funções tenham múltiplas cláusulas, então em vez de uma lógica de controle extensa e codificada de forma rígida, funções focadas podem ser escritas para adicionar/remover comportamento facilmente.

O Elixir oferece múltiplas cláusulas de função e guardas para escrever:

def number(n) when n == 7 do
  "Awesome, that's my favorite"
end

def number(_n) do
  "That's not my favorite"
end

Em tempo de execução, o Elixir testará, de cima para baixo do arquivo fonte, qual cláusula de função invocar.

Variáveis que não são usadas devem ser prefixadas com um underscore.

Guardas

As guardas são usadas para impedir que o Elixir invoque funções com base na avaliação dos argumentos por funções de guarda. As guardas começam com a palavra-chave when, seguida por uma expressão Boolean. Funções de guarda são funções especiais que:

  • Devem ser puras e não modificar nenhum estado global.
  • Devem retornar valores estritamente true ou false.

Uma lista de guardas comuns pode ser encontrada na documentação do Elixir. Ela inclui verificações de tipo, aritmética básica, comparações e operadores estritamente Boolean.

Argumentos Padrão

Funções podem declarar valores padrão para um ou mais argumentos. Vamos considerar esta função:

def number(n \\ 13), do: "That's not my favorite"

Quando compilado, o Elixir cria uma definição de função para number/0 (sem argumentos) e number/1 (um argumento).

Se mais de um argumento tiver valores padrão, os valores padrão serão aplicados à função da esquerda para a direita para preencher os argumentos ausentes.

Se a função tiver mais de uma cláusula, os argumentos padrão devem ser definidos em um cabeçalho de função (uma função sem corpo) antes das cláusulas da função:

def number(n \\ 13)
def number(n) when n < 10, do: "Dream bigger!"
def number(n) when n > 100, do: "Not that big..."

Instruções

Você está criando um jogo online trivial em que alguém pode adivinhar um número secreto. Você quer dar algum feedback, mas sem revelar a resposta por meio de um palpite. Você precisa criar uma função que forneça respostas diferentes dependendo de como o palpite se relaciona com o número secreto.

Condição Resposta
Quando o palpite é igual ao número secreto "Correct"
Quando o palpite é um a mais ou um a menos que o número secreto "So close"
Quando o palpite é maior que o número secreto "Too high"
Quando o palpite é menor que o número secreto "Too low"
Quando nenhum palpite é feito "Make a guess"

Todos os palpites e números secretos são números inteiros.

1. Gere a resposta quando o palpite for igual ao número secreto

Implemente a função compare/2, que recebe dois argumentos, secret_number e guess, ambos números inteiros.

GuessingGame.compare(5, 5)
# => "Correct"

2. Gere a resposta quando o palpite for maior que o número secreto

Modifique a função compare para responder a palpites maiores que o número secreto.

GuessingGame.compare(5, 8)
# => "Too high"

3. Gere a resposta quando o palpite for menor que o número secreto

Modifique a função compare para responder a palpites menores que o número secreto.

GuessingGame.compare(5, 2)
# => "Too low"

4. Gere as respostas quando o palpite for um a mais ou um a menos que o número secreto

Modifique a função compare para responder a palpites próximos do número secreto.

GuessingGame.compare(5, 6)
# => "So close"
GuessingGame.compare(5, 4)
# => "So close"

5. Gere a resposta quando não houver palpite

Modifique a função compare para responder quando não houver palpite.

GuessingGame.compare(5)
# => "Make a guess"

GuessingGame.compare(5, :no_guess)
# => "Make a guess"
Editar via GitHub O link abre em uma nova janela ou aba
Elixir Exercism

Tudo pronto para começar Jogo de adivinhação?

Crie sua conta no Exercism para aprender e dominar Elixir com 58 conceitos168 exercícios e mentoria humana de verdade, tudo de graça.