Uma das perguntas mais comuns do burburinho é esta:
Escreva um programa que imprima os números de 1 a 100.
Mas para múltiplos de três imprima “Fizz” em vez do
número e para os múltiplos de cinco imprima “Buzz”. Para
números múltiplos de três e cinco,
imprima “FizzBuzz”.
Eu escrevi isso em rubi.
No início meu objetivo era apenas fazer funcionar e foi isso que consegui.
range = 1..100
range.each do |x|
if x % 3 == 0 && x % 5 == 0
puts "FizzBuzz"
elsif x % 3 == 0
puts "Fizz"
elsif x % 5 == 0
puts "Buzz"
else
puts x
end
fim
Isso funcionou e minha próxima etapa foi refatorá-lo. Usei o que aprendi recentemente no curso de Ruby na Codecademy e foi isso que descobri.
(1..100).each{ |x|
y = ""
y += '"Fizz" if x % 3 == 0
y += ''Buzz" if x % 5 == 0
puts ( y.empty? ? x : y )
}
Quando x for um múltiplo de 3, ele adicionará a palavra “fizz” a y
quando x for um múltiplo de 5, ele adicionará a palavra “buzz” a y
quando for um múltiplo de ambos, ele adicionará a palavra fizz e buzz a y.
Usei a operadora ternária para mostrar o número, se não for fizz, buzz ou fizzbuzz.
Essa última linha basicamente diz que se y estiver vazio então é verdadeiro e x será exibido. Se não estiver vazio (fizzbuzz dentro), é falso e y será exibido.
puts (y.empty?? true: false);
Espero que ajude alguém