{"id":631,"date":"2022-01-28T09:00:00","date_gmt":"2022-01-28T12:00:00","guid":{"rendered":"https:\/\/devlooper.blog.br\/\/?p=631"},"modified":"2024-07-30T17:48:08","modified_gmt":"2024-07-30T20:48:08","slug":"linguagens-de-programacao-funcionais-o-que-sao-e-quais-as-vantagens","status":"publish","type":"post","link":"https:\/\/www.locaweb.com.br\/blog\/temas\/codigo-aberto\/linguagens-de-programacao-funcionais-o-que-sao-e-quais-as-vantagens\/","title":{"rendered":"Linguagens funcionais: saiba as vantagens de us\u00e1-las na programa\u00e7\u00e3o"},"content":{"rendered":"<p>As linguagens de programa\u00e7\u00e3o funcionais t\u00eam atra\u00eddo cada vez mais a aten\u00e7\u00e3o de grandes empresas. A avalia\u00e7\u00e3o da popularidade delas em sites respeitados \u2014 como&nbsp;GitHub e Stack Overflow \u2014 mostra que Elixir, Clojure e&nbsp;F# est\u00e3o gradualmente expandindo sua presen\u00e7a no mercado.<\/p>\n<p>Por\u00e9m, voc\u00ea sabe o que s\u00e3o elas?&nbsp;E&nbsp;quais seus benef\u00edcios? Neste artigo voc\u00ea vai ter uma introdu\u00e7\u00e3o ao conceito de&nbsp;linguagens funcionais, como elas funcionam, quais as principais existentes no mercado&nbsp;e quando devem ser utilizadas.<\/p>\n<h2>O que s\u00e3o linguagens funcionais de programa\u00e7\u00e3o?<\/h2>\n<p>O estilo da programa\u00e7\u00e3o funcional \u00e9 baseado em fun\u00e7\u00f5es, no sentido matem\u00e1tico do termo.&nbsp;Ele busca produzir sempre o mesmo resultado para as mesmas entradas, evitando gerar e lidar com efeitos colaterais.<\/p>\n<p>Vamos conferir um exemplo simples. Usaremos Ruby porque ela suporta os dois estilos.<\/p>\n<p>Suponha que voc\u00ea queira fornecer um aumento salarial para todos os funcion\u00e1rios. <strong>Em OOP,<\/strong> vamos precisar de uma classe para gerar os objetos:<\/p>\n<p>class Empregado<br>def initialize(nome, sal\u00e1rio)<br>@nome = nome<br>@sal\u00e1rio&nbsp;= sal\u00e1rio<br>end<\/p>\n<p>def change_sal\u00e1rio(amt)<br>@sal\u00e1rio&nbsp;= @sal\u00e1rio&nbsp;+ amt<br>end<\/p>\n<p>def description<br>&#8220;#{@nome} makes #{@sal\u00e1rio}&#8221;<br>end<br>end<\/p>\n<p><strong>Em seguida, vamos gerar os objetos:<\/strong><\/p>\n<p>empregados&nbsp;= [<br>Empregado.new(&#8220;Beto&#8221;, 100000.0),<br>Empregado.new(&#8220;Joana&#8221;, 125000.0)<br>]<\/p>\n<p><strong>Na terceira etapa, dar os aumentos:<\/strong><\/p>\n<p>empregados.each do |emp|<br>emp.change_sal\u00e1rio(10000.0)<br>end<\/p>\n<p><strong>E usar o m\u00e9todo each (&#8220;cada&#8221;), que guarda cada funcion\u00e1rio em uma vari\u00e1vel chamada emp.<\/strong><\/p>\n<p>employees.each do |emp|<br>puts emp.description<br>end<\/p>\n<p><strong>Na abordagem funcional, \u00e9 bem diferente. Primeiro, a estrutura de dados:<\/strong><\/p>\n<p>empregados = [<br>[ &#8220;Beto&#8221;,&nbsp; 100000.0 ],<br>[ &#8220;Joana&#8221;, 125000.0 ]<br>]<\/p>\n<p><strong>Em seguida, redigimos o m\u00e9todo:<\/strong><\/p>\n<p>felizes_empregados&nbsp;= mudar_salarios(empregados, 10000.0)<\/p>\n<p><strong>E, como n\u00e3o temos objetos, a fun\u00e7\u00e3o requer n\u00e3o s\u00f3 a quantidade, mas tamb\u00e9m os dados:<\/strong><\/p>\n<p>felizes_empregados.each do |emp|<br>puts &#8220;#{emp[0]} makes #{emp[1]}&#8221;<br>end<\/p>\n<h2>Como funcionam as linguagens funcionais de programa\u00e7\u00e3o<\/h2>\n<p>O c\u00f3digo na programa\u00e7\u00e3o funcional (FP, na sigla em ingl\u00eas) se define pela aus\u00eancia de efeitos colaterais nas fun\u00e7\u00f5es puras. Ele n\u00e3o se vale de dados de fora da fun\u00e7\u00e3o atual, nem modifica os que est\u00e3o fora da fun\u00e7\u00e3o atual. Todas as outras caracter\u00edsticas derivam dessa propriedade, e uma fun\u00e7\u00e3o n\u00e3o tem efeitos reversos quando traz sempre os mesmos resultados,&nbsp;n\u00e3o importa quantas vezes \u00e9 acionada.<\/p>\n<p>Dito de outra forma:&nbsp;os valores de sa\u00edda dependem apenas dos argumentos de entrada,&nbsp;em qualquer&nbsp;ambiente ou cen\u00e1rio em que o sistema esteja inserido.<\/p>\n<p>Quem est\u00e1 come\u00e7ando no mundo da FP&nbsp;precisa ligar uma chave &#8220;acad\u00eamica&#8221; na cabe\u00e7a. Isso significa estudar a defini\u00e7\u00e3o de uma s\u00e9rie de termos: fun\u00e7\u00f5es puras, composi\u00e7\u00e3o de fun\u00e7\u00f5es, evitar estados mut\u00e1veis, etc. A cultura tamb\u00e9m&nbsp;passa a ser de criar fun\u00e7\u00f5es com uma \u00fanica responsabilidade cada uma, contribuindo para a <a href=\"https:\/\/blog.locaweb.com.br\/temas\/codigo-aberto\/conheca-3-ferramentas-e-sites-que-avaliam-a-qualidade-do-codigo\/\" target=\"_blank\" rel=\"noopener noreferrer\">qualidade do c\u00f3digo<\/a>.<\/p>\n<h2>Quais s\u00e3o as linguagens de programa\u00e7\u00e3o?<\/h2>\n<p>S\u00e3o v\u00e1rias as linguagens de FP usadas no mercado. Veja, logo abaixo, as principais.<\/p>\n<h2>Haskell<\/h2>\n<p>Amplamente usada nas universidades e na ind\u00fastria, oferece uma separa\u00e7\u00e3o clara entre fun\u00e7\u00f5es puras e impuras. Seus programas s\u00e3o f\u00e1ceis de paralelizar e rodam de forma eficiente em hardware de m\u00faltiplos n\u00facleos (multicore). \u00c9&nbsp;<a href=\"https:\/\/code.fb.com\/security\/fighting-spam-with-haskell\/\" target=\"_blank\" rel=\"noopener noreferrer\">usada pelo Facebook<\/a>&nbsp;para combater o spam. A linguagem \u00e9 amplamente elogiada pela rede de Zuckerbeg, que comenta o bom desempenho e velocidade dela em implementar mudan\u00e7as.<\/p>\n<h2>Elixir<\/h2>\n<p>Desenvolvida para ser executada na Virtual Machine do Erlang, essa \u00e9 uma linguagem para construir aplica\u00e7\u00f5es escal\u00e1veis e de f\u00e1cil manuten\u00e7\u00e3o. Conta com uma comunidade que est\u00e1 contribuindo muito com bibliotecas e tamb\u00e9m executa tudo que j\u00e1 foi criado para Erlang.<\/p>\n<h2>Clojure<\/h2>\n<p>Tem o objetivo de ser uma linguagem de prop\u00f3sito geral adequada aos mesmos ambientes em que se usaria Java; com efeito, pode usar bibliotecas Java. Cont\u00e9m muitas formas de fazer valer o c\u00f3digo correto.<\/p>\n<h2>JavaScript e outras<\/h2>\n<p>Uma das tr\u00eas principais tecnologias da World Wide Web (ao lado do HTML e do CSS)&nbsp;\u00e9 multi-paradigm\u00e1tica, com suporte tamb\u00e9m para a programa\u00e7\u00e3o funcional. Permite p\u00e1ginas interativas na web e \u00e9 usada em quase todos os web sites. Todos os principais browsers t\u00eam um motor dedicado \u00e0&nbsp;JavaScript.<\/p>\n<p>Existem &#8220;transpilers&#8221; que permitem transformar em JavaScript (para rodar no browser) c\u00f3digos escritos em v\u00e1rias outras linguagens funcionais,&nbsp;como ClojureScript, ElixirScript e&nbsp;Elm, entre outras.<\/p>\n<h2>Quando utilizar as linguagens funcionais na programa\u00e7\u00e3o<\/h2>\n<p>As linguagens funcionais ainda s\u00e3o uma minoria no mercado quando comparadas com as OOP, mas seu uso na academia e na ind\u00fastria \u00e9 crescente. A Erlang, por exemplo, foi desenvolvido pela empresa sueca Ericsson no fim dos anos 80 para implementar sistemas de telecomunica\u00e7\u00f5es.<\/p>\n<p>Parte da&nbsp;<a href=\"https:\/\/blog.whatsapp.com\/196\/1-million-is-so-2011?\" target=\"_blank\" rel=\"noopener noreferrer\">infraestrutura do WhatsApp \u00e9 nessa linguagem<\/a>, uma das raz\u00f5es pelas quais um aplicativo com mais de 1 bilh\u00e3o de usu\u00e1rios \u00e9 mantido por uma empresa com cerca de 50 funcion\u00e1rios.<\/p>\n<p>Al\u00e9m do uso extensivo&nbsp;em desenvolvimento de sites, linguagens funcionais est\u00e3o sendo usadas em programas de an\u00e1lise financeira, programa\u00e7\u00e3o de rob\u00f4s industriais e at\u00e9 sistemas aeroespaciais.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-33934\" src=\"https:\/\/www.locaweb.com.br\/blog\/wp-content\/uploads\/2019\/01\/linguagens-funcionais-programacao.png\" alt=\"linguagens funcionais programa\u00e7\u00e3o\" width=\"812\" height=\"500\"><\/p>\n<h2>Vantagens das linguagens funcionais na programa\u00e7\u00e3o<\/h2>\n<p>Veja&nbsp;abaixo algumas das principais vantagens dessa metodologia:<\/p>\n<ul>\n<li>As abstra\u00e7\u00f5es da programa\u00e7\u00e3o funcional escondem grande n\u00famero de detalhes de opera\u00e7\u00f5es de rotina, como itera\u00e7\u00f5es. Isso torna o c\u00f3digo mais curto (como vimos acima), o que resulta em menor n\u00famero de erros;<\/li>\n<li>Na FP existe um n\u00famero menor de tipos primitivos. Em vez de criar uma descri\u00e7\u00e3o \u00fanica de um objeto com opera\u00e7\u00f5es na forma de m\u00e9todos, basta usar um dos poucos primitivos b\u00e1sicos otimizados;<\/li>\n<li>Por causa da flexibilidade da estrutura, o desenvolvedor pode trazer a linguagem mais pr\u00f3xima do problema, em vez de vice-versa. Al\u00e9m disso, bibliotecas de FP j\u00e1 oferecem ferramentas interessantes para resolver tarefas complexas que n\u00e3o existem nas linguagens OOP;<\/li>\n<li>Trabalhar com linguagens funcionais significa escrever c\u00f3digo mais preciso e mais rapidamente, facilitando testes e o debugging.<\/li>\n<\/ul>\n<p>As linguagens funcionais de programa\u00e7\u00e3o ajudam os desenvolvedores a escreverem c\u00f3digos que s\u00e3o curtos, r\u00e1pidos e de f\u00e1cil manuten\u00e7\u00e3o. Uma boa dica para come\u00e7ar \u00e9 tentar alguns exerc\u00edcios simples e depois partir para a leitura de livros sobre Haskell, Elixir ou Clojure, conforme for a solu\u00e7\u00e3o mais adequada para o seu cotidiano de trabalho.<\/p>\n<p>No in\u00edcio, a FP era usada apenas para resolver problemas espec\u00edficos. Entretanto, hoje ela \u00e9 aplicada at\u00e9 mesmo em projetos grandes de empresas de TI. Quanto mais voc\u00ea aprender, mais oportunidades v\u00e3o se abrir na sua carreira.<\/p>\n<p>Fique por dentro das melhores dicas em linguagens de programa\u00e7\u00e3o, prote\u00e7\u00e3o de dados e UX design para desenvolvedores. Assine nossa newsletter.<\/p>\n\n\n<div class=\"user-cta-block\" style=\"background-color:#2E333C;\"><p>Hospedagem Dedicada: muito mais recursos para garantir a melhor experi\u00eancia!<\/p><a class=\"user-cta\" style=\"background-color: #F00842\n;\" href=https:\/\/www.locaweb.com.br\/hospedagem-dedicada\/?utm_source=Blog&#038;utm_medium=own&#038;utm_campaign=linguagens-de-programacao-funcionais-o-que-sao-e-quais-as-vantagens&#038;utm_id=Blog\" target=\"_blank\" rel=\"noopener\">CLIQUE AQUI!<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>As linguagens de programa\u00e7\u00e3o funcionais t\u00eam atra\u00eddo cada vez mais a aten\u00e7\u00e3o de grandes empresas. A avalia\u00e7\u00e3o da popularidade delas em sites respeitados \u2014 como&nbsp;GitHub e Stack Overflow \u2014 mostra que Elixir, Clojure e&nbsp;F# est\u00e3o gradualmente expandindo sua presen\u00e7a no mercado. Por\u00e9m, voc\u00ea sabe o que s\u00e3o elas?&nbsp;E&nbsp;quais seus benef\u00edcios? Neste artigo voc\u00ea vai ter [&hellip;]<\/p>\n","protected":false},"author":24,"featured_media":33933,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-631","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-aberto"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/users\/24"}],"replies":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/comments?post=631"}],"version-history":[{"count":7,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/631\/revisions"}],"predecessor-version":[{"id":43023,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/posts\/631\/revisions\/43023"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media\/33933"}],"wp:attachment":[{"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/media?parent=631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/categories?post=631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.locaweb.com.br\/blog\/wp-json\/wp\/v2\/tags?post=631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}