Blocos
Um bloco em Ruby é caracterizado pelo uso das palavras chaves do
e end
ou pelo uso de chaves {}
.
Vamos usar blocos para percorrer Arrays e Hashes.
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
puts numeros.size
# => 12
numeros.each do |numero|
puts "#{numero} é par" if numero % 2 == 0
end
O mesmo código pode ser escrito em uma linha:
numeros.each { |numero| puts "#{numero} é par" if numero % 2 == 0 }
each
é um método que itera numa Array ou num Hash. numero
é a variável de iteração. Ou seja, a cada iteração, numero
passará a ter em seu conteúdo o mesmo conteúdo da array numeros
em uma posição específica.
Note que a estrutura de repetição for
funciona bem nesse caso, porém temos que especificar a quantidade de elementos na array.
tamanho = numeros.size
for numero in (1 .. tamanho) do
if numero % 2 == 0
puts "#{numero} é par"
end
end
Vejamos um exemplo com um Hash:
pessoa = {nome: 'Rafael', idade: 20, curso: 'BCC'}
pessoa.each do |chave, valor|
puts "#{chave}: #{valor}"
end
Observe que temos duas variáveis de iteração, chave
e valor
. A cada iteração um par chave-valor do Hash é selecionado e os seus dados de chave e valor são copiados para as variáveis de iteração.
Poderíamos usar os métodos each_key
e each_value
para iterar em chaves e valores, somente, respectivamente.
pessoa.each_key do |chave|
puts "#{chave}"
end
pessoa.each_value do |valor|
puts "#{valor}"
end