[MÚSICA] [MÚSICA] Olá, bem vindo ao curso sobre TDD. Eu sou Clovis Fernandes e hoje iremos dar continuidade ao nosso exemplo com múltiplos mau cheiros. E exemplifica o ciclo de refatoração. É, nós iremos até o mau cheiro 2 dos 5 mau cheiros que nós identificaremos, está certo? Essa vídeo aula é muito grande, nós vamos quebrar duas partes. Então, começamos aqui o nosso grande espetáculo sobre o ciclo de refatoração. O que a gente sabe quando o código entra na fase de refatoração ele tem que estar, ele tem que passar nos testes. Então, no nosso exemplo, nós estamos usando, eu apresento aí a bateria de testes. A bateria de testes segue o exemplo do tipo when then, não é? Que a gente já tinha falado anteriormente, está certo? Cada desses testes garante 1 caso de teste correspondente que vai fazer com que a minha funcionalidade calculate discount, faça exatamente o que eu quero, está certo? Eu tenho aí cada uma dessas condições do when then exemplifica e restringe claramente o que que eu quero fazer, está certo? Mas, no final, o que isso importa é que toda vez que eu fizer uma refatoração de mau cheiro, está certo, eu vou testar usando essa mesma bateria de testes, está certo? E ela vai ficar valendo do começo ao fim. Ou seja, a bateria não muda por causa da refatoração, está certo? Num primeiro passo, que eu já tenho agora o código testado para começar a refatorar, eu vou farejar, não é, o código busca de mau cheiros. Eu vou tentar olhar, não é, quais os maus cheiros que ele apresenta, está certo? Então aqui no nosso exemplo, eu posso mostrar pra vocês que nós temos os nomes inapropriados, está certo, quando eu falo age eu não sei o que quer dizer só isso dentro do contexto, na verdade, eu fico sabendo mais informação por causa do comentário que está ali do lado, dizendo uma idade acima do limite, não é, está certo? Que estaria correspondendo a sênior não é, idoso, não é? Então, eu estou dizendo aí que é not age, então não é idoso. O nome não é muito apropriado do jeito que está, o outro, mas ainda, não é, está só simplesmente o sub, não é. Sub, não é? Sub, eu preciso saber que isso tem a ver com alguma coisa que já foi subsidiada, não é, está certo? E o terceiro é pior ainda, porque ele é o not F time, não é, está certo, eu fico sabendo que ele quer dizer not full time por causa do comentário que diz que não é tempo parcial, então ele é tempo integral, não é, ele é full time, está certo? Então, os nomes estão bastante inapropriados. O segundo que atrapalha bastante aí são as Expressões Booleanas negativas, não é, está certo? Eu tenho o not age, eu tenho not sub, eu tenho not F time, está certo? Quer dizer, isso já foi provado, não é, que o ser humano ele não consegue trabalhar direito com negativas, não é, está certo? É, então, isso nós temos que mudar depois. E o terceiro é que está cheio de comentários, não é, está certo. O item 3 aí, não é, o mau cheiro 3 é o conjunto de comentários. Está muito cheio de comentários e a tendência, nesse exemplo, é que todos os comentários saiam. Não quer dizer que os comentários sejam ruins, no geral, é que você só vai colocar os comentários que sejam necessários. Normalmente são os comentários que respondem o quê e porquê. É, o código deve ser de uma determinada forma, está certo? E mesmo esses, de acordo com alguma forma de refatoração, eles também desaparecem. Então, código sempre vai ter muito pouco comentário. No resto ele é mau cheiro muito evidente, está certo. Continuando olhando aqui, eu tenho código com a variável temporária discount, ela aparece recebendo uma atribuição 4 lugares, não é, está certo e depois num return aparece de novo. Então isso aí claramente é código duplicado. E, por fim, nós temos if aninhado. Normalmente os ifs orientação a objetos poucos ifs acabam ficando no meu código, normalmente a gente remove a maioria deles através de polimorfismo, através de algum padrão de projeto ou usando a técnica que nós vamos mostrar na próxima parte dessa aula, está certo? Uma coisa que também é evidente que a técnica que eu vou aplicar ela trabalhe e remove esse código duplicado de uma vez só, está certo? Ou seja, quando você aprende a usar a técnica para remover o if aninhado, você já aprende a retirar esse código do jeito que está aí, esse código duplicado. Nós estamos separando aqui para ser uma maneira didática e exemplificar o código duplicado que a gente pode então remover, é nesse sentido. Com isso nós temos, então, uma lista de maus cheiros, não é, está certo, essa lista de maus cheiros tem nome inapropriados, tem ifs com expressões booleanas negativas, eu tenho comentários, está certo, eu tenho código duplicado. Esse código duplicado é decorrência, principalmente, por causa daquela técnica que estava lá que eu mostro ponto de saída apenas, ou seja, eu me fixei que eu tenho que ter ponto de saída e para isso eu sou obrigado a duplicar, a multiplicar a variável que vai receber esse valor de saída para devolvê-la no final, está certo? E, por fim, o último os ifs aninhados. Com isso nós chegamos ao final dessa parte, da metade desta aula, está certo? Que nós conseguimos, ao examinar a lista de, ao examinar o código que eu estou querendo refatorar, nós conseguimos identificar esses 5 maus cheiros, está certo? Então, com isso nós seremos capazes de, para cada dos mau cheiros nas outras partes futuras, eu vou conseguir então identificar as técnicas de refatoração que são apropriadas para cada dos tipos. Por isso que foi importante ter chegado nesta lista. Obrigado. [MÚSICA]