Guard Clause em Ruby

Dicas - 19/Jan/2020 - por Campus Code

Guard clause é o termo usado em Ruby para uma estrutura de código em programação, também conhecida como early return em outras linguagens. Esse padrão é bastante utilizado para reduzir a quantidade de blocos if e else no código que estamos desenvolvendo. Vamos ver um exemplo simples:

def full_name(name, last_name, title)
  if title.nil?
    print "#{name} #{last_name}"
  else 
    print "#{title} #{name} #{last_name}"
  end
end

No exemplo de código Ruby acima temos um método full_name que recebe name (nome), last_name (sobrenome) e title (forma de tratamento utilizada como sinal de respeito). Se title é fornecido, queremos que o método retorne o nome completo com tratamento, caso contrário, retorne apenas o nome completo. Agora vamos ver como esse código poderia ser escrito usando guard clause.

def full_name(name, last_name, title)
  return print "#{name} #{last_name}" if title.nil?

  print "#{title} #{name} #{last_name}"
end

No exemplo acima você deve ter notado que usamos a guard clause para retornar o resultado do método print. Elas também podem ser utilizadas para simplesmente evitar a execução de um trecho do código ou para antecipar o retorno do valor final de um método:

def send_welcome_email(user)
  return if user.nil? 
  # evitamos a chamada para enviar o email caso a variável esteja vazia

  user.send_email('Bem-vindo às guard clauses')
  logger.info("Email enviado com sucesso para #{user.email}")
end
def admin?
 return true if user.role == 'admin' 
 # antecipando o retorno do método


 print 'Usuário não autorizado'
 false     
end

Para finalizar, você pode ter várias guard clauses dentro do mesmo bloco de código. No exemplo abaixo, o método event_fee deve retornar a taxa cobrada do usuário para comprar ingressos de um evento de acordo com algumas regras:

def calculate_fee(event, user)
  return 0 if event.free?
  return 5 if user.vip?

  10
end

É isso, espero que com essa dica seu código fique cada vez mais enxuto!

Campus Code