Capítulo 06
De Guru-SP
O yield é tão poderoso quanto poderia ser. Ele, junto a parâmetros, possibilita combinações incrivelmente robustas. Veja nosso exemplo abaixo:
# Recebe dois valores e incrementa de 1 em 1
# até o máximo
def incrementa_um(valor_inicial, valor_final)
while valor_inicial <= valor_final
# recebemos um bloco?
if block_given?
# vamos então executar o bloco
yield valor_inicial
end
# incrementando...
valor_inicial = valor_inicial + 1
end
return valor_inicial
end
# Chamando com um bloco
incrementa_um(1, 5) { |arg| puts("Atual: " + arg.to_s + "\n") }
# Chamando sem um bloco
resultado = incrementa_um(1, 20)
puts("O valor no final da execução é: " + resultado.to_s)
E o resultado da execução:
$ ruby 05.rb Atual: 1 Atual: 2 Atual: 3 Atual: 4 Atual: 5 O valor no final da execução é: 21
Veja o poder dos blocos: com uma chamada diferente foi possível criar duas saídas completamente diferentes. Claro, esse método é inútil, você provavelmente nunca fará algo desse tipo (um método que incremente um número), mas para fins de demonstração é excelente.
Abaixo modifiquei um pouco o código para tratar com dois parâmetros:
# Recebe dois valores e incrementa de 1 em 1
# até o máximo
def incrementa_um(valor_inicial, valor_final)
while valor_inicial <= valor_final
# recebemos um bloco?
if block_given?
# vamos então executar o bloco
yield valor_inicial, valor_final
end
# incrementando...
valor_inicial = valor_inicial + 1
end
return valor_inicial
end
# Chamando com um bloco
incrementa_um(1, 5) { |arg1,arg2| puts(arg1.to_s + " - " + arg2.to_s + "\n") }
# Chamando sem um bloco
resultado = incrementa_um(1, 20)
puts("O valor no final da execução é: " + resultado.to_s)
E a saída:
$ ruby 05.rb 1 - 5 2 - 5 3 - 5 4 - 5 5 - 5 O valor no final da execução é: 21
Voltar para o tutorial de Ruby, ou ir para o Capítulo 07.
