{"id":784,"date":"2014-04-11T09:29:39","date_gmt":"2014-04-11T12:29:39","guid":{"rendered":"http:\/\/www.viazap.com.br\/?p=784"},"modified":"2014-04-11T09:29:39","modified_gmt":"2014-04-11T12:29:39","slug":"desenvolvimento-de-software-a-pratica-do-clean-code","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=784","title":{"rendered":"Desenvolvimento de Software \u2013 A Pr\u00e1tica do Clean Code"},"content":{"rendered":"<p>Ol\u00e1, pessoal!<\/p>\n<p>Em dezembro de 2013, comecei a ler o livro\u00a0<em><strong>Clean Code<\/strong><\/em>\u00a0do autor\u00a0<strong>Robert C. Martin<\/strong>\u00a0e devo dizer que aprendi muita, muita coisa com ele. Para quem se recorda, na\u00a0<a title=\"Dicas para o desenvolvimento de um software - Parte 9\" href=\"http:\/\/www.profissionaisti.com.br\/2013\/10\/dicas-para-o-desenvolvimento-de-um-software-funcional-parte-ix\/\">parte 9<\/a>\u00a0sobre dicas para o desenvolvimento de um software fiz uma breve introdu\u00e7\u00e3o ao\u00a0<em>Clean Code<\/em>, como tamb\u00e9m venho elaborando alguns artigos recentes sobre este assunto.<\/p>\n<p><a href=\"http:\/\/www.profissionaisti.com.br\/wp-content\/uploads\/2014\/04\/programacao-codigo-qualidade-software.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" alt=\"Imagem via Shutterstock\" src=\"http:\/\/www.profissionaisti.com.br\/wp-content\/uploads\/2014\/04\/programacao-codigo-qualidade-software.jpg\" width=\"580\" height=\"300\" \/><\/a><\/p>\n<p><span style=\"line-height: 1.5em;\">Hoje \u00e9 dia de entrar um pouco mais nos detalhes dessa pr\u00e1tica e conhecer algumas orienta\u00e7\u00f5es de como empreg\u00e1-la. Limpeza no c\u00f3digo j\u00e1!<\/span><\/p>\n<p><em>Antes de iniciar o artigo, gostaria de fazer um agradecimento ao\u00a0<strong>R\u00f4mulo Pelachini<\/strong>,\u00a0um\u00a0mega profissional em programa\u00e7\u00e3o, pela \u00a0gentileza em me emprestar o livro. Valeu, R\u00f4mulo!<!--more--><\/em><\/p>\n<p>Todos n\u00f3s, desenvolvedores, temos o desejo de ver o nosso c\u00f3digo funcionando da melhor forma, n\u00e3o \u00e9? Quando digo \u201cfuncionando\u201d, n\u00e3o me refiro apenas \u00e0 execu\u00e7\u00e3o correta da funcionalidade, mas tamb\u00e9m \u00e0 qualidade do c\u00f3digo e o n\u00edvel de expressividade que ele exp\u00f5e. Afinal, quando implementado um c\u00f3digo, o resultado ser\u00e1 visto tanto pelo cliente quanto por n\u00f3s mesmos. Quem j\u00e1 n\u00e3o se deparou com um c\u00f3digo antigo e ficou por horas interpretando a l\u00f3gica? Quem j\u00e1 n\u00e3o teve de refazer blocos de c\u00f3digo por causa da falta de clareza? A prop\u00f3sito, vou deixar a quest\u00e3o da expressividade para outro artigo.<\/p>\n<p>O conceito de\u00a0<em>Clean Code<\/em>\u00a0foi elaborado justamente para evitar a ilegibilidade do c\u00f3digo e aprimorar a qualidade da nossa codifica\u00e7\u00e3o. Na verdade, \u00e9 um conjunto de pr\u00e1ticas que deve ser adotado por qualquer programador que queira ser reconhecido como um bom profissional. Por\u00e9m, ao contr\u00e1rio do que muitos pensam, n\u00e3o basta somente ler um livro e acreditar que j\u00e1 conhece as diretrizes do\u00a0<em>Clean Code<\/em>. \u00c9 preciso pr\u00e1tica, racioc\u00ednio e, acima de tudo, determina\u00e7\u00e3o para produzir algo de qualidade. Por esse motivo, decidi reunir alguns pontos apresentados no livro e compartilh\u00e1-los aqui no PTI para disseminar essa pr\u00e1tica. Leia-os atentamente e lembre-se deles ao implementar o seu pr\u00f3ximo c\u00f3digo.<\/p>\n<p><strong>1) N\u00e3o \u00e9 poss\u00edvel criar um c\u00f3digo limpo de primeira<\/strong><br \/>\nPor mais que um desenvolvedor tente, \u00e9 praticamente imposs\u00edvel. Claro, \u00e9 extremamente importante que um desenvolvedor j\u00e1 comece a programar com as diretivas do\u00a0<em>Clean Code<\/em>\u00a0em mente mas, eventualmente, ele acabar\u00e1 voltando ao c\u00f3digo para refatorar ou renomear alguns m\u00e9todos que ficaram pass\u00edveis de m\u00e1 interpreta\u00e7\u00e3o. No entanto, isso \u00e9 perfeitamente natural. Quando iniciamos uma nova implementa\u00e7\u00e3o, n\u00e3o sabemos exatamente quais, quantos e como ser\u00e3o os m\u00e9todos que devemos implementar. \u00c0 medida que o c\u00f3digo vai tomando forma \u00e9 que come\u00e7amos a nossa \u201climpeza\u201d.<\/p>\n<p><strong>2) Pare de programar quando notar que o c\u00f3digo est\u00e1 ruim<\/strong><br \/>\nEvite implementar o c\u00f3digo por completo e s\u00f3 depois partir para o\u00a0<em>Clean Code<\/em>. A limpeza deve ser feita aos poucos, caso contr\u00e1rio, \u00e9 bem prov\u00e1vel que o desenvolvedor perca o foco do c\u00f3digo como um todo. Aquela ideia de\u00a0<em>\u201cvou deixar assim por enquanto e depois eu volto para arrumar\u201d<\/em>\u00a0\u00e9 uma passagem gr\u00e1tis para o esquecimento. Portanto, quando perceber que o c\u00f3digo est\u00e1 tomando propor\u00e7\u00f5es inadequadas e apresentando sinais de duplica\u00e7\u00e3o, interrompa a implementa\u00e7\u00e3o e fa\u00e7a uma limpeza antes de continuar. Na verdade, \u00e9 a mesma situa\u00e7\u00e3o de um bloco de cimento rec\u00e9m aplicado: aproveite para arrum\u00e1-lo enquanto ainda n\u00e3o est\u00e1 seco. Se ele secar, o trabalho de remov\u00ea-lo ou reform\u00e1-lo ser\u00e1 muito mais dif\u00edcil.<\/p>\n<p><strong>3) Aprenda a programar com paci\u00eancia<\/strong><br \/>\nUm dos efeitos do\u00a0<em>Clean Code<\/em>\u00a0\u00e9 o trabalho constante de remover e adicionar o mesmo c\u00f3digo repetidas vezes. Isso faz parte do processo de maturidade para alcan\u00e7ar o n\u00edvel ideal de qualidade. J\u00e1 perdi a conta das vezes que criei, alterei, removi, criei novamente e renomeei uma classe. A cada etapa, eu levantava um ponto de vista diferente do c\u00f3digo e o alterava para torn\u00e1-lo mais claro.<\/p>\n<p>Como analogia, imagine que voc\u00ea tenha acabado de se mudar para uma nova casa e est\u00e1 organizando os m\u00f3veis da sala para descobrir qual \u00e9 a acomoda\u00e7\u00e3o mais confort\u00e1vel. Para isso, voc\u00ea provavelmente precisar\u00e1 mudar os m\u00f3veis de lugar v\u00e1rias vezes, concorda? Esse \u00e9 o sentido! Assim como voc\u00ea busca a melhor disposi\u00e7\u00e3o dos m\u00f3veis na sala, tamb\u00e9m deve buscar a melhor organiza\u00e7\u00e3o do c\u00f3digo no seu programa. Aproveitando a analogia, lembre-se de que, da mesma forma que voc\u00ea receber\u00e1 visitas na sua sala, o seu c\u00f3digo tamb\u00e9m receber\u00e1 \u201cvisitas\u201d de outros programadores.<\/p>\n<p>Em conclus\u00e3o, se\u00a0<a title=\"Programa\u00e7\u00e3o: Como escrever um c\u00f3digo limpo?\" href=\"http:\/\/www.profissionaisti.com.br\/2011\/02\/programacao-como-escrever-um-codigo-limpo\/\">voc\u00ea deseja criar um c\u00f3digo limpo<\/a>\u00a0e com qualidade, esteja preparado para desfazer e refazer blocos de c\u00f3digo quantas vezes forem necess\u00e1rias.<\/p>\n<p><strong>4) Considere a codifica\u00e7\u00e3o como uma atividade de risco<\/strong><br \/>\nSe um requisito funcional n\u00e3o \u00e9 documentado, \u00e9 simples refazer a documenta\u00e7\u00e3o. Se houve uma falha na estimativa, \u00e9 f\u00e1cil refazer o cronograma. Por\u00e9m, se um c\u00f3digo estiver ruim, refaz\u00ea-lo \u00e9 algo demorado e, muitas vezes, custoso. Al\u00e9m disso, n\u00e3o se garante que ele ter\u00e1 o mesmo funcionamento como antes.<\/p>\n<p>Devemos nos comprometer com a relev\u00e2ncia da nossa codifica\u00e7\u00e3o, visto que o resultado do c\u00f3digo (e, consequentemente, da funcionalidade) est\u00e1 intimamente relacionado com o nosso n\u00edvel de responsabilidade. A ideia aqui n\u00e3o \u00e9 pressionar a consci\u00eancia do programador e penaliz\u00e1-lo por construir um c\u00f3digo imperfeito, mas apenas sugerir que ele considere a import\u00e2ncia dessa atividade no ciclo de vida do projeto.<\/p>\n<p><strong>5) Aumente a sua sensibilidade ao c\u00f3digo<\/strong><br \/>\nConforme utiliza as pr\u00e1ticas do\u00a0<em>Clean Code<\/em>, o desenvolvedor produz e amplia uma habilidade conhecida como \u201csensibilidade ao c\u00f3digo\u201d. Este termo se refere \u00e0 capacidade de visualizar um c\u00f3digo mal escrito e imediatamente pensar em diferentes formas de limp\u00e1-lo. Renomear vari\u00e1veis, desfazer blocos aninhados, refinar condi\u00e7\u00f5es, extrair m\u00e9todos e at\u00e9 mesmo considerar alternativas mais vi\u00e1veis para\u00a0<a title=\"Regra de neg\u00f3cio: um desafio para o desenvolvedor\" href=\"http:\/\/www.profissionaisti.com.br\/2012\/12\/regra-de-negocio-um-desafio-para-o-desenvolvedor\/\">tratar as regras de neg\u00f3cio<\/a>\u00a0s\u00e3o exemplos de sensibilidade t\u00e9cnica de um profissional. Quanto maior for este n\u00edvel de sensibilidade, melhor ser\u00e3o as solu\u00e7\u00f5es propostas e desenvolvidas pelo desenvolvedor.<\/p>\n<p><strong>6) Codifique pensando na leitura<\/strong><br \/>\nUma boa recomenda\u00e7\u00e3o para praticar o\u00a0<em>Clean Code<\/em>\u00a0\u00e9 implementar o c\u00f3digo j\u00e1 imaginando que outro desenvolvedor futuramente ir\u00e1 interpret\u00e1-lo. Na realidade, isso ir\u00e1 acontecer! Portanto, procure ler cada m\u00e9todo logo ap\u00f3s implement\u00e1-los e me\u00e7a o n\u00edvel de legibilidade. Ou ent\u00e3o, tente se colocar no lugar de outra pessoa e encontre as dificuldades que ela possivelmente teria ao ler o seu c\u00f3digo. Embora pare\u00e7a uma tarefa ma\u00e7ante, \u00e9 at\u00e9 gratificante, j\u00e1 que voc\u00ea acaba contemplando a qualidade do seu pr\u00f3prio c\u00f3digo.<\/p>\n<p>Leitores, sei que o artigo ficou um pouco extenso, mas espero ter transmitido as premissas adequadas para come\u00e7ar a praticar o\u00a0<em>Clean Code<\/em>.\u00a0Continuarei elaborando alguns artigos sobre este assunto nos pr\u00f3ximos meses. Aguardem!<\/p>\n<p>Um grande abra\u00e7o a todos e at\u00e9 a pr\u00f3xima!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1, pessoal! Em dezembro de 2013, comecei a ler o livro\u00a0Clean Code\u00a0do autor\u00a0Robert C. Martin\u00a0e devo dizer que aprendi muita, muita coisa com ele. Para quem se recorda, na\u00a0parte 9\u00a0sobre dicas para o desenvolvimento de um software fiz uma breve introdu\u00e7\u00e3o ao\u00a0Clean Code, como tamb\u00e9m venho elaborando alguns artigos recentes sobre este assunto. Hoje \u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,42,514],"tags":[517,518,516,515,366],"class_list":["post-784","post","type-post","status-publish","format-standard","hentry","category-viazap","category-leitura-recomendada","category-programacao","tag-a-pratica","tag-clean-code","tag-de-software","tag-desenvolvimento","tag-do"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=784"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/784\/revisions"}],"predecessor-version":[{"id":785,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/784\/revisions\/785"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}