[MÚSICA] Olá! Bem vindo ao curso sobre TDD, eu sou Clovis Fernandes e hoje iremos exemplificar o ciclo da refatoração através de exemplo que apresenta 5 tipos de mau cheiros. É uma maneira de vocês verificarem como o ciclo funciona com mais de que tipo de mau cheiro. Normalmente nos exemplos que se encontra por aí, geral é o mau cheiro que, apenas que vai ser tratado e uma técnica de refatoração apropriada para tratar esse mau cheiro. Aqui nós vamos então mostrar exemplo que é simples, com poucos comandos, mas que vai ter 5 tipos de mau cheiros. Uma coisa que precisa ficar bem clara para vocês é que nós vamos dividir essa apresentação 3 partes, essa primeira parte é sobre preparação; a segunda parte nós vamos tratar até o segundo mau cheiro; e a terceira parte nós vamos tratar do mau cheiro 3 ao o quinto mau cheiro. Existe material escrito que acompanha essa sequência de aulas, está certo? Que vai explicar mais detalhes relação ao que eu apresento aqui. Voltamos então ao nosso espetáculo, está certo? Vamos começar com a aula, que hoje eu quero ter uma interação muito grande com vocês. Eu vou estar sempre fazendo uma pergunta, porque nessa primeira parte que é de preparação é para entender esse código que nós vamos trabalhar, que nós vamos refatorar e entender os problemas que ele têm, problemas de falta de clareza, dificuldade de compreensão. Cada vai ter o seu nível de dificuldade, está certo? É por isso que cada pessoa vai sentir de uma forma essa experiência. O que nós vamos aqui fazer é, sobre o meu comando, está certo? Eu vou pedir para vocês pararem o vídeo e responderem a uma ou duas perguntas sobre o código que vocês estão olhando. O código vai ser sempre o mesmo, mas ele vai ter algumas coisas que vão melhorando ao longo do tempo, está certo? Que podem ajudar a entender melhor o que o código está expressando, que é isso no final que a gente quer, não é? Expressar a intenção daquele código da melhor maneira possível, está certo? Então, eis aí o código, está certo? A pergunta é: qual é o desconto, se o cliente já foi subsidiado, está certo? Então nós temos aí a classe Cliente com algumas, com construtor, que algumas variáveis de instância que vão ser passados os valores através do construtor e tem método, está certo? Que é o calculateDiscount, e eu estou perguntando para vocês pararem o vídeo agora, e me dizer relação aos 5 valores que estão ali, especial os 4 primeiros está certo? Qual é o valor do desconto, olhando o código do calculateDiscount? Parando agora agora, espero que vocês fiquem torno de 30 segundos para examinar o código e me dar uma resposta cada uma das perguntas de agora seguinte. Estou aqui de volta. Como não tem o código, fica difícil responder, está certo? Não tem o código. Pô professor, que pergunta difícil. Mas essa pergunta pode ser tornar difícil mesmo que tenhamos o código, é isso que eu quero mostrar para vocês. Então vamos examinar agora o código desse método, está certo? E a pergunta é a mesma, está aqui o código. Qual que é o desconto se o cliente já é subsidiado, quer dizer, qual é o valor do desconto que vai voltar, entre a, b, c e d, está certo, qual é o valor? Vocês então têm 30 segundos, valendo, parar o video. [SEM ÁUDIO] Estamos de volta. Foi fácil não é? Provavelmente muitos de vocês tiveram dificuldades, por que? O código, não é código claro, está certo? Então vamos ajudar vocês colocando alguma informação adicional, está certo? O que é que eu vou fazer agora? Eu vou colocar, acabei de colocar slide, que eu estou colocando conjunto de comentários, está certo? Colocando conjunto de comentários para ajudar vocês responderem, está certo? Então, vocês têm agora 30 segundos para responder qual que é o desconto se o cliente já é subsidiado. Parando agora o video, 30 segundos. E aí como é que foi agora tendo os comentários? Obviamente para muitas pessoas, mesmo os comentários estando aí com o objetivo de ajudar, na verdade esse aí, não está ajudando nada. Por que é que não está ajudando nada? Porque o comentário você pode colocar errado. O próprio programador pode não entender e foi o que eu fiz aí, eu me enganei. Ops! Tinha algo errado, está invertido lá, os comentários. Se aconteceu isso, dificilmente vocês iam chegar na resposta certa. Então, nós não podemos confiar nos comentários. Na verdade os comentários no nosso caso, nós só vamos colocar comentários que respondam perguntas do tipo: o que ou por que e ainda sim muitos que respondem perguntas o que e por que, vão ser eliminados por causa das técnicas de refatoração que nós vamos usar, está certo? Então agora, vocês estão vendo aí de novo, a pergunta é a mesma, qual é o desconto se o cliente já é subsidiado, agora os comentários estão todos certos, está certo? Então parando o video mais 30 segundos. Continua não sendo muito fácil, não é, está certo? Então o que é que eu vou fazer? Vou fazer colocar comentário a mais if then, está certo? Eu vou fazer isso, vou colocar comentário a mais no if then, esta certo? Coloquei lá comentário no if not sub, está certo? E vamos lá, valendo de novo, qual é o desconto, se o cliente já foi subsidiado, 30 segundos, parando o vídeo agora. Continua não sendo muito fácil, esse código é curto, então talvez você encontre o else mas facilmente, mas se o código fosse maior e o else estivesse mais longe já ficaria, começaria ficar difícil, está certo? Outra coisa que dificulta isso também é porque nós estamos trabalhando com uma variável booleana negativa, eu estou negando. O cérebro humano não funciona bem com negativas ele se perde pouco, está certo? Vocês vejam que ali nós temos 3 variáveis com negativos e tem uma que está muito complicada, porque ela é negativo do negativo, é o not, notFTime, ali F para full time, está certo? Se eu estou trabalhando com part time no comentário, deve ser full time, está certo? Então, o que eu queria mostrar aí para vocês, é que se o código não está claro, se eu não expressei a minha intenção nos nomes das variáveis, poderia ser até no nome do próprio método ou da classe, está certo? Fica muito difícil compreender as coisas. Nós vamos mostrar algumas refatorações que vão começar tratando dessa parte, dessa expressão da intenção, está certo? E outras que vão complementar e no final eu quero ter código mais claro, que de bate-pronto você olha e sabe responder qualquer uma das possível perguntas, eu só fiz tipo de pergunta, e ali eu tinha 4 possibilidades de perguntas. Mas o código tem que estão tão claro que quanto eu fizer a pergunta, ela é rapidamente respondida, questão de 1 segundo meio segundo provavelmente, se nós chegarmos código de qualidade. Obrigado, até a próxima aula.