Concrete Logo
Hamburger button

Elixir para Iniciantes: FizzBuzz

  • Blog
  • 13 de Abril de 2015
Share

Esse post foi originalmente publicado no Blog pessoal do autor. Confira aqui.

Na minha opinião, o Elixir é uma das linguagens mais interessantes desde Ruby, e eu acho que 2015 vai ser o ano dela. Neste post, vou mostrar como resolver o famoso problema FizzBuzz com Elixir e mostrar algumas das principais características da linguagem.

A definição do FizzBuzz é a seguinte:

  1. Se n é divisível por 3 e 5, substitua por “FizzBuzz”
  2. Se n é divisível por 3, substitua por “Fizz”
  3. Se n é divisível por 5, substitua por “Buzz”
  4. Se n não é divisível nem por 3 nem por 5, apenas é dito n

Primeiro, vamos criar um módulo com um método para chamar o valor de que queremos calcular:

Agora, vamos criar um método fizzbuzz/3 para resolver a primeira condição do problema:

  1. Se n é divisível por 3 e 5, substitua por “FizzBuzz”

Fácil, não? Se rem(n,3) é zero e rem(n,5) também é zero, nós queremos substituir por “FizzBuzz”. Agora, vamos implementar a segunda e a terceira condição:

2. Se n é divisível por 3, substitua por “Fizz”

3. Se n is divisível por 5, substitua por “Buzz”

E precisamos de um último método para cobrir a quarta condição:

4. Se n não é divisível nem por 3 nem por 5, apenas é dito n

Com isso, podemos chamar nosso módulo e checar o valor de n, assim:

Mas ainda não terminamos. Para resolver o problema FizzBuzz nós precisamos passar o n e o módulo retornar o valor de para cada número (começando com 1) até que seja atingido.

Nós precisamos de um método start/1 que vai receber n e começar a contagem com 1. E mudar o método compute/1 para receber os valores de n e a contagem além de adicionar um recurso.

Uma vez que o recurso nunca termina, nós precisamos de alguma coisa a mais, como uma Guard clause no nosso método compute/2.

Mas se nós só fizermos isso, receberemos um erro:

Isso acontece porque precisamos de um método para terminar a chamada recursiva. Então, vamos adicionar:

E é isso! Uma versão elegante do FizzBuzz com Elixir.

Ficou alguma dúvida, tem alguma sugestão ou crítica? Aproveite os campos abaixo. Até a próxima!