{"id":3016,"date":"2020-06-24T08:53:38","date_gmt":"2020-06-24T08:53:38","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"modified":"2026-04-24T11:30:09","modified_gmt":"2026-04-24T11:30:09","slug":"uma-cartilha-rapida-sobre-refatoracao-para-iniciantes","status":"publish","type":"post","link":"https:\/\/thecodest.co\/pt\/blog\/a-quick-primer-on-refactoring-for-beginners\/","title":{"rendered":"Uma cartilha r\u00e1pida sobre refatora\u00e7\u00e3o para iniciantes"},"content":{"rendered":"<p>Por conseguinte, \u00e9 incompreens\u00edvel para alguns que <strong>refactoriza\u00e7\u00e3o<\/strong> \u00e9 de facto uma \u00e1rea da programa\u00e7\u00e3o e \u00e9 tamb\u00e9m uma parte muito importante do trabalho do programador. O c\u00f3digo est\u00e1 sempre a evoluir, ser\u00e1 modificado enquanto houver a possibilidade de adicionar novas funcionalidades. No entanto, pode tomar uma forma que j\u00e1 n\u00e3o permita adicionar efetivamente novas funcionalidades e seria mais f\u00e1cil reescrever todo o programa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 a refactoriza\u00e7\u00e3o?<\/h2>\n\n\n\n<p>Normalmente, a resposta que se ouve \u00e9 que se est\u00e1 a alterar a estrutura do c\u00f3digo, aplicando uma s\u00e9rie de transforma\u00e7\u00f5es de refactoring sem afetar o comportamento observ\u00e1vel do c\u00f3digo. Isso \u00e9 verdade. Recentemente, tamb\u00e9m me deparei com uma defini\u00e7\u00e3o de <b>Martin Fowler<\/b> no seu livro <b>\"Melhorar a conce\u00e7\u00e3o do c\u00f3digo existente\"<\/b> onde descreve <strong>refactoriza\u00e7\u00e3o<\/strong> como \"fazer grandes mudan\u00e7as em pequenos passos\". Ele descreve <strong>refactoriza\u00e7\u00e3o<\/strong> como uma altera\u00e7\u00e3o de c\u00f3digo que n\u00e3o afecta o seu funcionamento, mas sublinha que tem de ser feita em pequenos passos.<\/p>\n\n\n\n<p>O livro defende tamb\u00e9m que <strong>refactoriza\u00e7\u00e3o<\/strong> n\u00e3o afecta o funcionamento do c\u00f3digo e salienta que n\u00e3o tem qualquer efeito sobre a aprova\u00e7\u00e3o nos testes em qualquer altura. Descreve passo a passo como efetuar com seguran\u00e7a <strong>refactoriza\u00e7\u00e3o<\/strong>. Gostei do seu livro porque descreve truques simples que podem ser utilizados no trabalho quotidiano.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Porque \u00e9 que precisamos de refactoring?<\/h2>\n\n\n\n<p>&nbsp;Na maioria das vezes, pode ser necess\u00e1rio quando se pretende introduzir uma nova funcionalidade e o c\u00f3digo na sua vers\u00e3o atual n\u00e3o o permite ou seria mais dif\u00edcil sem altera\u00e7\u00f5es ao c\u00f3digo. Al\u00e9m disso, \u00e9 \u00fatil nos casos em que adicionar mais funcionalidades n\u00e3o \u00e9 rent\u00e1vel em termos de tempo, ou seja, seria mais r\u00e1pido reescrever o c\u00f3digo de raiz. Penso que por vezes se esquece que <strong>refactoriza\u00e7\u00e3o<\/strong> pode tornar o c\u00f3digo mais limpo e mais leg\u00edvel. Martin escreve no seu livro como faz refactoring quando sente odores desagrad\u00e1veis no c\u00f3digo e, como ele diz, <b>\"deixa sempre espa\u00e7o para o melhor\"<\/b>. E surpreendeu-me ao ver a refac\u00e7\u00e3o como um elemento do trabalho quotidiano do c\u00f3digo. Para mim, os c\u00f3digos s\u00e3o muitas vezes incompreens\u00edveis, a sua leitura \u00e9 uma experi\u00eancia um pouco dif\u00edcil, pois o c\u00f3digo \u00e9 muitas vezes pouco intuitivo.<\/p>\n\n\n\n<p>A carater\u00edstica distintiva de um programa bem concebido \u00e9 a sua <b>modularidade<\/b>gra\u00e7as \u00e0 qual basta conhecer apenas uma pequena parte do c\u00f3digo para introduzir a maioria das modifica\u00e7\u00f5es. A modularidade tamb\u00e9m facilita a entrada de novas pessoas e o in\u00edcio de um trabalho mais eficiente. Para conseguir esta modularidade, os elementos do programa relacionados devem ser agrupados, sendo as liga\u00e7\u00f5es compreens\u00edveis e f\u00e1ceis de encontrar. N\u00e3o existe uma regra \u00fanica para o fazer. \u00c0 medida que se conhece e compreende cada vez melhor a forma como o c\u00f3digo deve funcionar, \u00e9 poss\u00edvel agrupar os elementos, mas por vezes tamb\u00e9m \u00e9 necess\u00e1rio testar e verificar.<\/p>\n\n\n\n<p>Uma das regras de refactoring em <b>YAGNI<\/b>\u00e9 um acr\u00f3nimo de \"You Aren't Gonna Need It\" (N\u00e3o vais precisar dele) e deriva de <b>Programa\u00e7\u00e3o eXtreme (XP) <\/b>utilizado principalmente em <strong><a href=\"https:\/\/thecodest.co\/pt\/blog\/how-to-implement-agile-methodology\/\">\u00c1gil<\/a> <a href=\"https:\/\/thecodest.co\/pt\/blog\/8-key-questions-to-ask-your-software-development-outsourcing-partner\/\">desenvolvimento de software<\/a> equipas<\/strong>. Resumindo, <b>YAGNI<\/b> diz que s\u00f3 se devem fazer coisas actualizadas. Isto significa, basicamente, que mesmo que algo possa vir a ser necess\u00e1rio no futuro, n\u00e3o deve ser feito neste momento.  Mas tamb\u00e9m n\u00e3o podemos esmagar outras extens\u00f5es e \u00e9 aqui que a modularidade se torna importante.<\/p>\n\n\n\n<p>Quando se fala de <strong>refactoriza\u00e7\u00e3o<\/strong>No entanto, um dos elementos mais essenciais, ou seja, os testes, deve ser mencionado. Em <strong>refactoriza\u00e7\u00e3o<\/strong>precisamos de saber que o c\u00f3digo ainda funciona, porque <strong>refactoriza\u00e7\u00e3o<\/strong> n\u00e3o altera o seu funcionamento, mas sim a sua estrutura, pelo que todos os testes devem ser aprovados. \u00c9 prefer\u00edvel executar testes para a parte do c\u00f3digo em que estamos a trabalhar ap\u00f3s cada pequena transforma\u00e7\u00e3o. Isso d\u00e1 <a href=\"https:\/\/thecodest.co\/pt\/blog\/why-us-companies-are-opting-for-polish-developers\/\">n\u00f3s<\/a> uma confirma\u00e7\u00e3o de que tudo funciona como deve ser e encurta o tempo de toda a opera\u00e7\u00e3o. \u00c9 disto que o Martin fala no seu livro - executar testes com a maior frequ\u00eancia poss\u00edvel para n\u00e3o dar um passo atr\u00e1s e perder tempo \u00e0 procura de uma transforma\u00e7\u00e3o que tenha quebrado alguma coisa.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/pt\/dictionary\/what-is-code-refactoring\/\">Refactoriza\u00e7\u00e3o de c\u00f3digo<\/a><\/strong> sem testes \u00e9 uma dor de cabe\u00e7a e h\u00e1 uma grande probabilidade de algo correr mal. Se for poss\u00edvel, seria melhor adicionar, pelo menos, alguns testes b\u00e1sicos que nos dar\u00e3o alguma garantia de que o c\u00f3digo funciona.<\/p>\n\n\n\n<p>As transforma\u00e7\u00f5es listadas abaixo s\u00e3o apenas exemplos, mas s\u00e3o realmente \u00fateis na programa\u00e7\u00e3o di\u00e1ria:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Extra\u00e7\u00e3o de fun\u00e7\u00f5es e extra\u00e7\u00e3o de vari\u00e1veis - se a fun\u00e7\u00e3o for demasiado longa, verifique se existem fun\u00e7\u00f5es menores que possam ser extra\u00eddas. O mesmo se aplica a linhas longas. Estas transforma\u00e7\u00f5es podem ajudar a encontrar duplica\u00e7\u00f5es no c\u00f3digo. Gra\u00e7as \u00e0s Small Functions, o c\u00f3digo torna-se mais claro e compreens\u00edvel,<\/li>\n\n\n\n<li>Renomea\u00e7\u00e3o de fun\u00e7\u00f5es e vari\u00e1veis - a utiliza\u00e7\u00e3o da conven\u00e7\u00e3o de nomea\u00e7\u00e3o correta \u00e9 essencial para uma boa programa\u00e7\u00e3o. Os nomes das vari\u00e1veis, quando bem escolhidos, podem dizer muito sobre o c\u00f3digo,<\/li>\n\n\n\n<li>Agrupamento das fun\u00e7\u00f5es numa classe - esta altera\u00e7\u00e3o \u00e9 \u00fatil quando duas classes executam opera\u00e7\u00f5es semelhantes, uma vez que pode encurtar o comprimento da classe,<\/li>\n\n\n\n<li>Substituir a declara\u00e7\u00e3o aninhada - se a condi\u00e7\u00e3o for verificada para um caso especial, emitir uma declara\u00e7\u00e3o de retorno quando a condi\u00e7\u00e3o ocorrer. Esses tipos de testes s\u00e3o geralmente chamados de cl\u00e1usula de guarda. Substituir uma declara\u00e7\u00e3o condicional aninhada por uma declara\u00e7\u00e3o de sa\u00edda altera a \u00eanfase no c\u00f3digo. A constru\u00e7\u00e3o if-else atribui o mesmo peso a ambas as variantes. Para a pessoa que est\u00e1 a ler o c\u00f3digo, \u00e9 uma mensagem de que cada uma delas \u00e9 igualmente prov\u00e1vel e importante,<\/li>\n\n\n\n<li>Introduzir um caso especial - se utilizar muitas vezes algumas condi\u00e7\u00f5es no seu c\u00f3digo, pode valer a pena criar uma estrutura separada para elas. Como resultado, a maioria das verifica\u00e7\u00f5es de casos especiais pode ser substitu\u00edda por simples chamadas de fun\u00e7\u00e3o. Muitas vezes, o valor comum que requer um processamento especial \u00e9 o nulo. Por isso, este padr\u00e3o \u00e9 frequentemente designado por Objeto nulo. No entanto, esta abordagem pode ser utilizada em qualquer caso especial,<\/li>\n\n\n\n<li>Substitui\u00e7\u00e3o do Polimorfismo de Instru\u00e7\u00e3o Condicional.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplo<\/h2>\n\n\n\n<p>Este \u00e9 um artigo sobre <strong>refactoriza\u00e7\u00e3o<\/strong> e \u00e9 necess\u00e1rio um exemplo. Quero mostrar um exemplo simples de refactoring abaixo com a utiliza\u00e7\u00e3o de <b>Substituir a declara\u00e7\u00e3o aninhada<\/b> e <b>Substitui\u00e7\u00e3o do polimorfismo de instru\u00e7\u00e3o condicional<\/b>. Digamos que temos uma fun\u00e7\u00e3o de programa que devolve um <a href=\"https:\/\/thecodest.co\/pt\/blog\/hash-to-use-or-not-to-use\/\">haxixe<\/a> com informa\u00e7\u00f5es sobre como regar as plantas na vida real. Essas informa\u00e7\u00f5es estariam provavelmente no modelo, mas, neste exemplo, est\u00e3o na fun\u00e7\u00e3o.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def rega_info(planta)\n     resultado = {}\n     if planta.is_a? Suculenta || planta.is_a? Cato\n         result = { water_amount: \"Um pouco\" , como fazer: \"Do fundo\", dura\u00e7\u00e3o da rega: \"2 semanas\" }\n     elsif planta.is_a? Alocasia || planta.is_a? Maranta\n         result = { water_amount: \"Grande quantidade\", como_fazer: \"Como preferires\", dura\u00e7\u00e3o da rega: \"5 dias\" }\n     elsif planta.is_a? Peperomia\n         resultado = { quantidade_de_\u00e1gua: \"Quantidade dicente\",\n             como_fazer: \"A partir do fundo! n\u00e3o gostam de \u00e1gua nas folhas\",\n             dura\u00e7\u00e3o_da_rega: \"1 semana\" }\n     else\n         resultado = { quantidade_de_\u00e1gua: \"Quantidade dicente\",\n             como_fazer: \"Como preferir\",\n             dura\u00e7\u00e3o_da_rega: \"1 semana\"\n             }\n     fim\n     devolver resultado\n fim\n<\/code><\/pre>\n\n\n\n<p>A ideia \u00e9 mudar se voltar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"ruby\" class=\"language-ruby\">se planta.isa? Suculenta || planta.isa? Cato\n\n     result = { wateramount: \"Um pouco\" , howto: \"A partir do fundo\",\n<\/code><\/pre>\n\n\n\n<p>Para<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"><code>return { water_amount: \"Um pouco\" , como_fazer: \"Do fundo\",watering_duration: \"2 semanas\" } if planta.is_a? Suculenta || planta.is_a? Cato<\/code><\/code><\/pre>\n\n\n\n<p>retorno { \u00e1gua<em>quantidade: \"Um bocadinho\" , como<\/em>para: \"A partir do fundo\", rega<em>dura\u00e7\u00e3o: \"2 semanas\" } if plant.is<\/em>a? Suculenta || planta.is_a? Cato<\/p>\n\n\n\n<p>E assim por diante, at\u00e9 chegarmos a uma fun\u00e7\u00e3o que se parece com isto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\nreturn result = { wateramount: \"Um pouco\" , howto: \"Do fundo\", dura\u00e7\u00e3o da rega: \"2 semanas\" } if planta.isa? Suculenta || planta.is_a? Cato\n\nreturn result = { wateramount: \"Grande quantidade\", como: \"Como preferires\", dura\u00e7\u00e3o da rega: \"5 dias\" } if planta.isa? Alocasia || planta.is_a? Maranta\n\nreturn result = { water_amount: \"Quantidade de \u00e1gua\",\n\n          howto: \"A partir do fundo! eles n\u00e3o gostam de \u00e1gua nas folhas\",\n          dura\u00e7\u00e3o da rega: \"1 semana\" } if planta.is_a? Peperomia\n\nreturn result = { quantidade_de_\u00e1gua: \"Quantidade de \u00e1gua\",\n\n          como_fazer: \"Como preferir\",\n\n          dura\u00e7\u00e3o da rega: \"1 semana\"\n\n          }\n\nfim<\/code><\/pre>\n\n\n\n<p>\u00a0No final, j\u00e1 t\u00ednhamos um resultado de retorno. E um bom h\u00e1bito \u00e9 fazer isto passo a passo e testar cada altera\u00e7\u00e3o. Podias substituir este bloco if por um caso de switch e ficaria imediatamente melhor, e n\u00e3o terias de verificar todos os ifs de cada vez. Ficaria assim:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\nswich plant.class.to_string\n\ncase Suculenta, Cato\n\n     { wateramount: \"Um pouco\" , como: \"A partir do fundo\", dura\u00e7\u00e3o da rega: \"2 semanas\" }\n\ncaso Alocasia, Maranta\n\n     { wateramount: \"Grande quantidade\", como: \"Como preferir\", dura\u00e7\u00e3o da rega: \"5 dias\" }\n\ncaso Peperomia\n\n     { quantidade_de_\u00e1gua: \"Quantidade de \u00e1gua\",\n\n          como_fazer: \"A partir do fundo! eles n\u00e3o gostam de \u00e1gua nas folhas\",\n\n          dura\u00e7\u00e3o_da_rega: \"1 semana\" }\n\nelse\n\n     { water_amount: \"Quantidade de dicente\",\n\n            como_fazer: \"Como preferir\",\n\n       dura\u00e7\u00e3o da rega: \"1 semana\" }\n\nfim\n\nfim<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>E depois pode aplicar o <b>Substitui\u00e7\u00e3o do polimorfismo de instru\u00e7\u00e3o condicional<\/b>. Trata-se de criar uma classe com uma fun\u00e7\u00e3o que devolve o valor correto e os coloca nos seus devidos lugares.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">classe Suculenta\n\n...\n\ndef rega_info()\n\n     return { wateramount: \"Um pouco\" , como: \"Do fundo\", dura\u00e7\u00e3o da rega: \"2 semanas\" }\n\nfim\n\nfim\n\nclasse Cactus\n\n...\n\ndef rega_info()\n\n     return { wateramount: \"Um pouco\" , como: \"Do fundo\", dura\u00e7\u00e3o da rega: \"2 semanas\" }\n\nfim\n\nfim\n\nclasse Alocasia\n\n...\n\ndef rega_info\n\n     return { wateramount: \"Grande quantidade\", howto: \"Como preferir\", dura\u00e7\u00e3o da rega: \"5 dias\" }\n\nfim\n\nfim\n\nclasse Maranta\n\n...\n\ndef rega_info\n\n     return { wateramount: \"Grande quantidade\", howto: \"Como preferir\", dura\u00e7\u00e3o da rega: \"5 dias\" }\n\nfim\n\nfim\n\nclasse Peperomia\n\n...\n\ndef rega_info\n\n     return { water_amount: \"Quantidade de \u00e1gua\",\n\n      como_fazer: \"A partir do fundo! eles n\u00e3o gostam de \u00e1gua nas folhas\",\n\n      dura\u00e7\u00e3o_da_rega: \"1 semana\" }\n\nfim\n\nfim\n\nclasse Planta\n\n...\n\ndef rega_info\n\n     return { water_amount: \"Quantidade de \u00e1gua\",\n\n              como_fazer: \"Como preferir\",\n\n              dura\u00e7\u00e3o da rega: \"1 semana\" }\n\nfim\n\nfim<\/code><\/pre>\n\n\n\n<p>E na fun\u00e7\u00e3o principal watering_infofunction, o c\u00f3digo ter\u00e1 o seguinte aspeto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">def watering_info(plant)\n\n    planta.map(&amp;:watering_info)\n\nfim<\/code><\/pre>\n\n\n\n<p>Naturalmente, esta fun\u00e7\u00e3o pode ser removida e substitu\u00edda pelo seu conte\u00fado. Com este exemplo, quis apresentar a fun\u00e7\u00e3o geral <strong>padr\u00e3o de refactoriza\u00e7\u00e3o<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumo<\/h2>\n\n\n\n<p><strong>Refactoring<\/strong> \u00e9 um tema importante. Espero que este artigo tenha sido um incentivo para ler mais. Estes <strong>compet\u00eancias de refac\u00e7\u00e3o<\/strong> ajudam-no a detetar os seus erros e a melhorar a sua oficina de c\u00f3digo limpo. Recomendo a leitura do livro de Martin (Improving the Design of Existing Code), que \u00e9 um conjunto bastante b\u00e1sico e \u00fatil de regras de <strong>refactoriza\u00e7\u00e3o<\/strong>. O autor mostra v\u00e1rias transforma\u00e7\u00f5es passo a passo com uma explica\u00e7\u00e3o completa e motiva\u00e7\u00e3o e dicas sobre como evitar erros em <strong>refactoriza\u00e7\u00e3o<\/strong>. Devido \u00e0 sua versatilidade, \u00e9 um livro encantador para front-end e <strong>programadores backend<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/careers\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/ruby_developer_hiring.jpeg\" alt=\"Tornar-se Programador J\u00fanior Ruby\"\/><\/a><\/figure>\n\n\n\n<p><strong>Ler mais<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">Ruby GraphQL. E quanto ao desempenho?<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Carris e outros meios de transporte<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Desenvolvimento Rails com TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Talvez esteja a escrever sobre algo \u00f3bvio para muitos, mas talvez n\u00e3o para todos. Refactoring \u00e9, penso eu, um t\u00f3pico complicado porque envolve a altera\u00e7\u00e3o do c\u00f3digo sem afetar o seu funcionamento.<\/p>","protected":false},"author":2,"featured_media":3017,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3016","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>A Quick Primer on Refactoring for Beginners - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/pt\/blogue\/uma-cartilha-rapida-sobre-refatoracao-para-iniciantes\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Quick Primer on Refactoring for Beginners\" \/>\n<meta property=\"og:description\" content=\"Perhaps I am writing about something obvious to many, but maybe not to everyone. Refactoring is, I think, a complicated topic because it involves changing the code without affecting its operation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/pt\/blogue\/uma-cartilha-rapida-sobre-refatoracao-para-iniciantes\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2020-06-24T08:53:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-24T11:30:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"A Quick Primer on Refactoring for Beginners\",\"datePublished\":\"2020-06-24T08:53:38+00:00\",\"dateModified\":\"2026-04-24T11:30:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"},\"wordCount\":1338,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\",\"name\":\"A Quick Primer on Refactoring for Beginners - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"datePublished\":\"2020-06-24T08:53:38+00:00\",\"dateModified\":\"2026-04-24T11:30:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/regactor.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/a-quick-primer-on-refactoring-for-beginners\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Quick Primer on Refactoring for Beginners\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/pt\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Uma cartilha r\u00e1pida sobre refatora\u00e7\u00e3o para iniciantes - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/pt\/blogue\/uma-cartilha-rapida-sobre-refatoracao-para-iniciantes\/","og_locale":"pt_PT","og_type":"article","og_title":"A Quick Primer on Refactoring for Beginners","og_description":"Perhaps I am writing about something obvious to many, but maybe not to everyone. Refactoring is, I think, a complicated topic because it involves changing the code without affecting its operation.","og_url":"https:\/\/thecodest.co\/pt\/blogue\/uma-cartilha-rapida-sobre-refatoracao-para-iniciantes\/","og_site_name":"The Codest","article_published_time":"2020-06-24T08:53:38+00:00","article_modified_time":"2026-04-24T11:30:09+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"A Quick Primer on Refactoring for Beginners","datePublished":"2020-06-24T08:53:38+00:00","dateModified":"2026-04-24T11:30:09+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"},"wordCount":1338,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","articleSection":["Software Development"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/","url":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/","name":"Uma cartilha r\u00e1pida sobre refatora\u00e7\u00e3o para iniciantes - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","datePublished":"2020-06-24T08:53:38+00:00","dateModified":"2026-04-24T11:30:09+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/regactor.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/a-quick-primer-on-refactoring-for-beginners\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"A Quick Primer on Refactoring for Beginners"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/pt\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":12,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":7707,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/posts\/3016\/revisions\/7707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/media\/3017"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/pt\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}