-
Notifications
You must be signed in to change notification settings - Fork 14
/
041_guard_clause_use_if_ou_inless_apos_um_comando.rb
executable file
·71 lines (56 loc) · 1.92 KB
/
041_guard_clause_use_if_ou_inless_apos_um_comando.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 07/06/2016 - Everaldo Gomes - everaldo.gomes@gmail.com
#
# 041 - Guard Clause: Use if ou unless após um comando
#
#
# Guard Clause é uma técnica que usa um condicional (if ou unless)
# em uma função, garantindo que ela falhe o mais cedo possível.
#
# Guard Clause aumenta a legibilidade do código
#
#
# http://www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html
# http://www.thechrisoshow.com/2009/02/16/using-guard-clauses-in-your-ruby-code/
#
#
# No link abaixo, apresento um exemplo de uso de Guard Clause
# em uma aplicação de exemplo
# (não-completa) sobre um campeonato de futebol. O método <=>
# compara dois times, de acordo com o número de pontos, vitórias,
# saldo de gols, gols marcados e como último critério de desempate o
# nome. Este método possui apenas 10 linhas, e é relativamente bem legível,
# graças ao uso de guard clauses, que substituem ifs aninhados.
#
# https://goo.gl/erST7M
#
# def <=>(other)
# return -1 if points > other.points
# return 1 if other.points > points
# return -1 if wins > other.wins
# return 1 if other.wins > wins
# return -1 if goal_difference > other.goal_difference
# return 1 if other.goal_difference > goal_difference
# return -1 if goals_scored > other.goals_scored
# return 1 if other.goals_scored > goals_scored
# return -1 if name < other.name
# return 1
# end
#
#
#
# Esta técnica foi utilizada no Exemplo 035
def faça_um_sanduíche(maquina)
raise ArgumentError, "Não é uma máquina obediente" unless maquina.respond_to?(:faça_um_sanduíche)
maquina.faça_um_sanduíche
end
maquina1 = Object.new
maquina2 = Object.new
maquina1.define_singleton_method :faça_um_sanduíche do
puts "Misto quente com bacon sem salada"
end
faça_um_sanduíche(maquina1)
begin
faça_um_sanduíche(maquina2)
rescue ArgumentError => e
puts "Houve um erro: #{e}"
end