Retorno nulo após o loop e também no bloco excepto em Ruby

Aug 18 2020

Eu tenho um código de trabalho como abaixo. Existe alguma maneira melhor de retornar nilapós o eachloop e unless elseno exemplo abaixo?

def find_member(member_name)
  unless members.empty?
    members.each do |member|
      if member.name == member_name
        return member
      end
    end
    nil
  else
    nil
  end
end

Devo passar nilem cada caso porque existem condições diferentes em outros métodos onde esse método é chamado. Essa é a razão pela qual escrevi o código acima.

Respostas

5 D.SM Aug 18 2020 at 03:05

Ruby tem um detectmétodo, então todo o seu método pode ser substituído por

members.detect { |member| member.name == member_name }

Como um aparte, eachfunciona bem para matrizes vazias, portanto, a empty?verificação que você faz é completamente desnecessária, mesmo se você mantiver o loop explícito.