{"id":406,"date":"2017-01-26T18:20:00","date_gmt":"2017-01-26T20:20:00","guid":{"rendered":"https:\/\/cahfelix.tech\/blog\/?p=406"},"modified":"2025-10-30T14:10:19","modified_gmt":"2025-10-30T17:10:19","slug":"entendendo-sobre-funcoes-puras","status":"publish","type":"post","link":"https:\/\/cahfelix.tech\/blog\/entendendo-sobre-funcoes-puras\/","title":{"rendered":"Entendendo sobre fun\u00e7\u00f5es puras"},"content":{"rendered":"\n<p>Fun\u00e7\u00f5es puras s\u00e3o um conceito muito importante na <strong>programa\u00e7\u00e3o funcional<\/strong>. Elas ajudam a deixar o c\u00f3digo mais previs\u00edvel, f\u00e1cil de testar e com menos bugs.<\/p>\n\n\n\n<p>Mas afinal\u2026 o que \u00e9 uma fun\u00e7\u00e3o pura?<br>Vamos descobrir passo a passo =)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">O que \u00e9 uma fun\u00e7\u00e3o pura?<\/h3>\n\n\n\n<p>Uma fun\u00e7\u00e3o pura \u00e9 uma fun\u00e7\u00e3o que <strong>faz sempre a mesma coisa<\/strong> e <strong>n\u00e3o interfere em nada fora dela<\/strong>.<br>Ela \u00e9 como uma <strong>caixinha fechada<\/strong>: voc\u00ea coloca algo dentro (os argumentos) e recebe algo de volta (o retorno), sem que nada fora da caixa seja alterado.<\/p>\n\n\n\n<p>Para isso, ela precisa seguir <strong>tr\u00eas regras simples<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Mesma entrada, mesma sa\u00edda<\/strong><br>Se voc\u00ea passar os mesmos valores, ela sempre vai retornar o mesmo resultado.<\/li>\n\n\n\n<li><strong>Nada de efeitos colaterais<\/strong><br>Ela n\u00e3o muda vari\u00e1veis externas, n\u00e3o altera o DOM, n\u00e3o escreve em arquivos, n\u00e3o faz chamadas de rede.Tudo o que acontece nela, fica nela.<\/li>\n\n\n\n<li><strong>Sem depender do mundo l\u00e1 fora<\/strong><br>A fun\u00e7\u00e3o deve funcionar sozinha, sem depender de valores fora do seu escopo.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de fun\u00e7\u00e3o impura<\/h3>\n\n\n\n<p>Aqui temos uma fun\u00e7\u00e3o <strong>impura<\/strong>.<\/p>\n\n\n\n<p>Ela usa uma vari\u00e1vel externa (<code>counter<\/code>) que muda a cada execu\u00e7\u00e3o. Isso faz com que o resultado <strong>dependa do estado global<\/strong>, e n\u00e3o apenas do que foi passado como argumento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let counter = 0;\n\nlet increment = function() {\n  counter = counter + 1;\n  return counter;\n};\n<\/code><\/pre>\n\n\n\n<p>Problema: o valor de retorno depende do que aconteceu antes, ou seja, se chamarmos v\u00e1rias vezes, o resultado muda, mesmo sem alterar os argumentos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de fun\u00e7\u00e3o pura<\/h3>\n\n\n\n<p>Agora sim, uma fun\u00e7\u00e3o <strong>pura<\/strong>.<\/p>\n\n\n\n<p>Ela depende apenas do valor recebido e <strong>n\u00e3o altera nada fora dela<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let increment = function(counter) {\n  return counter + 1;\n};\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Se voc\u00ea passar <code>increment(0)<\/code>, o resultado ser\u00e1 sempre <code>1<\/code>.<\/li>\n\n\n\n<li>Se passar <code>increment(5)<\/code>, sempre <code>6<\/code>.<\/li>\n\n\n\n<li>Simples e previs\u00edvel.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Por que usar fun\u00e7\u00f5es puras?<\/h3>\n\n\n\n<p>Fun\u00e7\u00f5es puras trazem muitos benef\u00edcios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 <strong>S\u00e3o previs\u00edveis:<\/strong> sempre fazem o mesmo, sem surpresas.<\/li>\n\n\n\n<li>\ud83e\uddea <strong>F\u00e1ceis de testar:<\/strong> basta comparar entradas e sa\u00eddas.<\/li>\n\n\n\n<li>\ud83e\udde0 <strong>Mais leg\u00edveis:<\/strong> deixam claro o que est\u00e1 acontecendo.<\/li>\n\n\n\n<li>\ud83e\udde9 <strong>Menos bugs:<\/strong> n\u00e3o dependem de estados escondidos ou mut\u00e1veis.<\/li>\n<\/ul>\n\n\n\n<p>Elas s\u00e3o a base da <strong>programa\u00e7\u00e3o funcional<\/strong>, um estilo que valoriza clareza e consist\u00eancia.<br>Quanto mais puras forem suas fun\u00e7\u00f5es, mais f\u00e1cil ser\u00e1 entender e manter seu c\u00f3digo.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><em>Fun\u00e7\u00f5es puras s\u00e3o como bons amigos no c\u00f3digo: voc\u00ea sabe exatamente o que esperar delas, toda vez que precisar.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fun\u00e7\u00f5es puras s\u00e3o um conceito muito importante na programa\u00e7\u00e3o funcional. Elas ajudam a deixar o c\u00f3digo mais previs\u00edvel, f\u00e1cil de testar e com menos bugs. Mas afinal\u2026 o que \u00e9&#8230;<\/p>\n","protected":false},"author":1,"featured_media":408,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[18],"class_list":["post-406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engenharia-de-software","tag-boas-praticas-de-engenharia"],"aioseo_notices":[],"featured":false,"read_time":3,"_links":{"self":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/comments?post=406"}],"version-history":[{"count":1,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/406\/revisions"}],"predecessor-version":[{"id":407,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/406\/revisions\/407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media\/408"}],"wp:attachment":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media?parent=406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/categories?post=406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/tags?post=406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}