1
00:00:00,040 --> 00:00:03,040
Olá, hoje a gente vai dar uma 
olhada num assunto chave para 

2
00:00:03,040 --> 00:00:05,520
quem desenvolve software, os 
codes mels. 

3
00:00:05,520 --> 00:00:07,640
Sabe aqueles maus cheiros no 
código? 

4
00:00:07,680 --> 00:00:09,880
Isso. 
Nossa base aqui é um material 

5
00:00:09,880 --> 00:00:13,040
bem legal do livro engenharia de
software Moderna. 

6
00:00:13,200 --> 00:00:16,480
A ideia é entender esses 
indicadores, né? 

7
00:00:16,760 --> 00:00:19,800
Para saber onde o código talvez 
precise de um trato, para 

8
00:00:19,800 --> 00:00:21,920
facilitar a manutenção, a 
evolução. 

9
00:00:22,000 --> 00:00:25,960
Enfim, vamos investigar isso. 
Exato, e é bom definir, né? 

10
00:00:26,200 --> 00:00:28,960
Formalmente, codes mels são 
tipo. 

11
00:00:29,160 --> 00:00:33,080
Sinais de alerta eles indicam 
que pode haver um problema ali, 

12
00:00:33,360 --> 00:00:36,360
dificuldade de manter e de 
entender e de mudar, testar. 

13
00:00:37,360 --> 00:00:41,160
Mas olha, é super importante 
lembrar, são indicadores. 

14
00:00:41,400 --> 00:00:44,000
Não é porque tem o cheiro que 
você tem que sair refaturando 

15
00:00:44,000 --> 00:00:45,440
loucamente. 
Depende. 

16
00:00:45,440 --> 00:00:47,600
Sabe quão importante é aquele 
trecho? 

17
00:00:47,600 --> 00:00:50,560
Mexe muito nele. 
Certo, o contexto manda e o 

18
00:00:50,560 --> 00:00:53,920
material já começa forte com o 
código duplicado. 

19
00:00:54,240 --> 00:00:58,680
Ele coloca como Oo vilão 
principal, talvez o mais comum e

20
00:00:58,680 --> 00:01:01,120
danoso. 
É um clássico, pior que é. 

21
00:01:01,480 --> 00:01:07,520
E não é só o retrabalho, né? 
É o risco de de inconsistência 

22
00:01:07,520 --> 00:01:09,840
que isso gera. 
Imagina num projeto grande? 

23
00:01:10,360 --> 00:01:12,680
Nossa, total. 
E o interessante é que essa 

24
00:01:12,680 --> 00:01:16,040
duplicação ela ela nem sempre é 
óbvia. 

25
00:01:16,040 --> 00:01:19,200
Assim, na cara existem os tais 
clones, né? 

26
00:01:19,200 --> 00:01:22,040
Ah, sim. 
Tem o tipo um que é igualzinho, 

27
00:01:22,040 --> 00:01:25,960
só muda espaço, comentário. 
O tipo 2 já muda nome de 

28
00:01:25,960 --> 00:01:29,920
variável identificador, o tipo 3
tem umas mudancinhas nos 

29
00:01:29,920 --> 00:01:32,840
comandos e o tipo 4 que é mais 
sutil. 

30
00:01:32,880 --> 00:01:36,840
Eles fazem a mesma coisa, mas 
com lógicas diferentes, tipo hã 

31
00:01:37,000 --> 00:01:40,160
calcular fatorial interativo e 
recursivo. 

32
00:01:40,160 --> 00:01:44,400
Entendi o resultado é o mesmo, 
mas o como é diferente isso para

33
00:01:44,400 --> 00:01:46,720
resolver, geralmente a gente 
pensa em quê? 

34
00:01:47,280 --> 00:01:51,280
Extração de método para tirar o 
trecho comum, ou extração de 

35
00:01:51,280 --> 00:01:55,040
classe se for algo maior, ou até
o pulop metal, se tiver a ver 

36
00:01:55,040 --> 00:01:57,760
com herança. 
E olha só, um estudo de 2013 que

37
00:01:57,760 --> 00:02:01,160
o livro cita, com 85 
desenvolvedores, mostrou que 

38
00:02:01,160 --> 00:02:04,600
código duplicado era a maior 
preocupação deles mesmo. 

39
00:02:04,680 --> 00:02:08,320
Faz sentido o que nos leva para 
outro cheiro bem conhecido. 

40
00:02:08,479 --> 00:02:10,960
Métodos longos quem nunca, não 
é? 

41
00:02:11,200 --> 00:02:14,200
Abriu um método e foi rolando. 
Rolando. 

42
00:02:14,480 --> 00:02:19,200
Pois é, a regra geral é. 
Métodos pequenos e focados, uma 

43
00:02:19,200 --> 00:02:22,720
responsabilidade só. 
Idealmente quando fica muito 

44
00:02:22,720 --> 00:02:26,400
longo é é complicado de 
entender, de testar, de dar 

45
00:02:26,400 --> 00:02:29,880
manutenção. 
A solução mais direta geralmente

46
00:02:29,880 --> 00:02:33,840
é extração de método, quebrar 
aquele monstrinho em pedaços 

47
00:02:33,840 --> 00:02:37,400
menores, mais gerenciáveis. 
É, e não tem um número mágico de

48
00:02:37,400 --> 00:02:39,960
linhas, né? 
Mas a galera hoje em dia tende a

49
00:02:39,960 --> 00:02:42,040
gostar de métodos mais 
curtinhos. 

50
00:02:42,600 --> 00:02:44,440
Sei lá, menos de 20 linhas, 
talvez? 

51
00:02:44,520 --> 00:02:46,520
Sim, essa é uma referência 
comum. 

52
00:02:46,640 --> 00:02:49,520
Mas, claro, depende da 
linguagem, do contexto. 

53
00:02:49,640 --> 00:02:51,800
Sempre. 
E o mesmo vale para classes 

54
00:02:51,800 --> 00:02:53,760
grandes. 
A lógica parecida. 

55
00:02:54,000 --> 00:02:56,920
Uma classe não devia fazer coisa
demais, ter muitas 

56
00:02:56,920 --> 00:02:59,800
responsabilidades que não tem 
muito a ver umas com as outras. 

57
00:02:59,800 --> 00:03:02,120
Baixa coesão, né? 
Exatamente. 

58
00:03:02,440 --> 00:03:06,680
Geralmente você vê isso quando 
tem muitos atributos e eles não 

59
00:03:07,120 --> 00:03:09,120
não se conversam muito bem ali 
dentro. 

60
00:03:09,120 --> 00:03:13,880
A solução parecida também. 
Extração de classe divide a 

61
00:03:13,880 --> 00:03:17,240
responsabilidade. 
Aí que entram as famosas God 

62
00:03:17,240 --> 00:03:21,440
classes, os blogs, aquelas 
classes que sabem tudo, fazem 

63
00:03:21,440 --> 00:03:22,920
tudo. 
Essas mesmas. 

64
00:03:22,920 --> 00:03:28,440
Fico pensando se nomes, tipo 
manager, system controller, se 

65
00:03:28,440 --> 00:03:32,720
são sempre um alerta ou só um 
padrão que às vezes pode levar a

66
00:03:32,720 --> 00:03:35,240
isso. 
Olha, é um bom, um bom 

67
00:03:35,240 --> 00:03:37,680
indicador, com certeza, não é 
regra. 

68
00:03:38,000 --> 00:03:41,000
Mas vale a pena investigar 
quando você vê esses nomes muito

69
00:03:41,000 --> 00:03:42,280
genéricos? 
Certo. 

70
00:03:42,320 --> 00:03:45,840
E falando em investigar relações
entre classes, tem o cheiro. 

71
00:03:45,840 --> 00:03:50,120
Com nome ótimo feature and VA 
inveja de funcionalidades. 

72
00:03:50,440 --> 00:03:52,560
Adoro esse nome. 
É tipo. 

73
00:03:52,680 --> 00:03:56,760
O método tá lá numa classe, mas 
fica o tempo todo chamando coisa

74
00:03:56,760 --> 00:04:00,840
de outra classe, usando mais os 
dados e métodos de lado que os 

75
00:04:00,840 --> 00:04:03,040
seus próprios. 
É quase como se ele quisesse 

76
00:04:03,040 --> 00:04:05,320
morar na outra classe. 
É bem isso. 

77
00:04:05,600 --> 00:04:09,040
A analogia é perfeita. 
O exemplo conceitual que o livro

78
00:04:09,040 --> 00:04:13,040
dá mostra isso, um método 
chamando várias coisas de um 

79
00:04:13,040 --> 00:04:16,640
objeto de outra classe e quase 
nada da sua própria uhum mais 

80
00:04:16,640 --> 00:04:20,920
sentido na classe invejada. 
Aí a refaturação é pensar na 

81
00:04:20,920 --> 00:04:24,120
movimentação de método. 
Faz todo o sentido próximo 

82
00:04:24,120 --> 00:04:26,880
ponto, métodos com muitos 
parâmetros. 

83
00:04:26,920 --> 00:04:29,960
Ah, sim. 
A ideia é buscar simplicidade, 

84
00:04:29,960 --> 00:04:32,520
clareza. 
Muitos parâmetros deixam o 

85
00:04:32,520 --> 00:04:36,080
método difícil de usar. 
De entender qual a ordem, o que 

86
00:04:36,080 --> 00:04:38,200
cada um faz. 
É fácil de se perder? 

87
00:04:38,200 --> 00:04:43,640
Total e tem 2 saídas principais.
Conceitualmente, primeira, será 

88
00:04:43,640 --> 00:04:46,760
que algum parâmetro pode ser 
Descoberto lá dentro do método 

89
00:04:47,040 --> 00:04:51,240
tipo, obter o parâmetro p 2 a 
partir do p um que você já 

90
00:04:51,240 --> 00:04:54,000
recebeu? 
Entendi evitar passar o que pode

91
00:04:54,000 --> 00:04:56,520
ser calculado internamente. 
Exato, isso. 

92
00:04:56,960 --> 00:05:00,800
A segunda é agrupar parâmetros 
que sempre andam juntos. 

93
00:05:01,080 --> 00:05:04,840
Em vez de passar início, fim, 
fuso, horários separados, talvez

94
00:05:04,840 --> 00:05:07,520
criar um objeto intervalo de 
tempo, sabe? 

95
00:05:07,520 --> 00:05:10,800
Sim. 
Agrupar parece tão elegante 

96
00:05:10,800 --> 00:05:13,360
depois que a gente pensa, 
simplifica a assinatura do 

97
00:05:13,360 --> 00:05:17,200
método para caramba. 
Exato e por último, mas não 

98
00:05:17,200 --> 00:05:19,920
menos importante, variáveis 
globais. 

99
00:05:19,920 --> 00:05:24,920
Ah, essas velhas conhecidas. 
Pois é, o problema clássico 

100
00:05:24,920 --> 00:05:27,520
delas é o acoplamento ruim que 
geram. 

101
00:05:27,800 --> 00:05:31,480
Fica muito difícil entender um 
pedaço do código isolado, porque

102
00:05:31,480 --> 00:05:34,200
o comportamento dele pode 
depender de uma variável global 

103
00:05:34,200 --> 00:05:36,040
que sabe se lá onde foi 
alterada. 

104
00:05:36,040 --> 00:05:39,800
Imagina depurar isso? 
Uma função simples f que usa uma

105
00:05:39,800 --> 00:05:42,960
global GO. 
Resultado de f depende 

106
00:05:42,960 --> 00:05:45,040
totalmente do valor de g naquele
instante. 

107
00:05:45,400 --> 00:05:48,600
EG pode ter sido modificada em 
qualquer lugar. 

108
00:05:48,920 --> 00:05:50,880
É a receita pro pesadelo na hora
de achar. 

109
00:05:50,880 --> 00:05:54,720
Bug precisamente e. 
Vale lembrar que atributos 

110
00:05:54,720 --> 00:05:58,560
estáticos em Java, por exemplo. 
Acabou agindo meio como globais,

111
00:05:58,560 --> 00:06:00,280
né? 
Nesse sentido de estado 

112
00:06:00,280 --> 00:06:02,840
compartilhado e acessível de 
muitos lugares. 

113
00:06:02,960 --> 00:06:06,520
Exatamente. 
O estado global complica demais 

114
00:06:06,520 --> 00:06:09,920
o raciocínio sobre o código, 
essa visibilidade toda. 

115
00:06:09,920 --> 00:06:13,520
A chance de alteração vinda de 
qualquer lugar, introduz uma 

116
00:06:13,520 --> 00:06:15,840
complexidade que a gente deveria
evitar. 

117
00:06:16,120 --> 00:06:21,160
Perfeito, então, resumindo, 
ficar de olho nesses cheiros, 

118
00:06:21,440 --> 00:06:25,560
código duplicado, métodos e 
classes gigantes, a tal da 

119
00:06:25,560 --> 00:06:28,840
inveja. 
Parâmetros de mais e fugir das 

120
00:06:28,840 --> 00:06:32,120
globais parece um ótimo caminho 
para ter um código mais 

121
00:06:32,120 --> 00:06:34,160
saudável, mais fácil de 
trabalhar, né? 

122
00:06:34,360 --> 00:06:38,480
Com certeza é o primeiro passo. 
Excelente obrigado pela atenção 

123
00:06:38,480 --> 00:06:39,520
nessa análise de hoje.
