Métodos de Arrays do Ruby que você precisa conhecer!

Dicas - 14/Out/2019 - por Allan Siqueira

Map/Each

Esses dois métodos são bastante similares, ambos permitem que você execute uma ação para cada item de seu Array.

Vamos ver isso no código!

numeros = [1, 2, 3]
numeros.each{ |numero| puts(numero + 1) }
# 2
# 3
# 4
=> [1, 2, 3]

numeros.map{ |numero| numero + 1 }
=> [2, 3, 4]

A diferença é que o .map retorna um novo Array, com os retornos de cada iteração, enquanto o .each retorna o próprio objeto que foi iterado.

Select/Reject

O .select permite que você selecione elementos de um Array conforme os critérios que estipular. Você precisa passar para ele, como parâmetro, uma função que retorne um boolean, assim ele retornará um Array com os elementos que resultarem em verdadeiro (true).

animais = ['pato', 'gato', 'cachorro']
animais.select { |animal| animal.end_with? 'to' }
=> ['pato', 'gato']

O .reject faz o contrário do .select, assim, não vou prolongar muito a explicação pois seu funcionamento é bastante similar.

animais = ['pato', 'gato', 'cachorro']
animais.reject { |animal| animal.end_with? 'to' }
=> ['cachorro']

Reduce/Join

O .reduce é o mais complexo entre esses métodos, porém ele é usado geralmente para executar tarefas simples, como contas matemáticas. Veja o exemplo:

numeros = [1, 2, 3, 4]
numeros.reduce{ |soma, numero| soma + numero }
=> 10

O .reduce vai acumular os retornos das iterações em uma variável (no nosso exemplo, a soma). Na primeira iteração, ele soma os dois primeiros elementos do Array, depois vai somar o próximo valor ao resultado e assim por diante. Ao final, retorna o valor de soma.

O .join é parecido com o .reduce. Ele recebe um argumento, uma string que vai ser inserida entre os elementos da lista e retorna uma longa string com todos os elementos da lista separados pelo parâmetro passado:

vegetais = ['batata', 'couve', 'brócolis']
vegetais.join(' e ')
=> "batata e couve e brócolis"

É sempre interessante conhecer os diferentes métodos que o Ruby nos fornece. Eles podem poupar bastante dor de cabeça!


Referências