Home - PedroCarvalho000/Trabalhos-de-Paradigmas-de-linguagem GitHub Wiki
Anjana Vakil, professora de inglês, linguista computacional e desenvolvedora de software, apresenta em sua palestra dada durante a JSUnconf 2016 uma introdução ao uso e aprendizado do paradigma de programação funcional na linguagem JavaScrypt. Durante a palestra é explicado o que é programação funcional , como e porque utiliza-la e porque ela é interessante para a linguagem JavaScrypt, são mostrados também diversos conceitos e cuidados que se aplicam ao uso do paradigma. Mesmo a apresentadora tendo relativamente pouco tempo de experiência com os tópicos discutidos ela conseguiu trazer exemplos simples e explicar os conceitos de maneira extremamente clara fazendo com que muitos dos ouvintes ficassem interessados.
A programação funcional é descrita de diversas maneiras por Anjana. Podemos vê-la como sendo um paradigma onde funções reinam, um estilo de organização de código e de se encarar projetos, uma maneira de se encarar um problema ou tarefa, e talvez a mais importante, como sendo uma tendência. Ser descrita como tendência é um algo importante pois mostra a relevância atual dela para o aprendizado na área de ciência da computação. Nas décadas de 80 e 90 a programação funcional era vista como esotérica, mas atualmente ela já está sendo utilizada de maneira bem mais disseminada e já possui diversas ferramentas, linguagens e bibliotecas que dão suporte a ela.
Tendo o paradigma funcional se popularizado a palestrante justifica seu uso em Javascrypt no lugar de outros mostrando que já existe uma comunidade para dar suporte para aqueles que querem aprender esse paradigma. Fala-se também que a programação funcional traz diversas vantagens e que muitas vezes é mais simples que outros paradigmas, que apresentam construções e noções complexas e confusas, por ser mais abstraída e possuir uma estrutura mais flexível possibilitando deixar a linguagem mais próxima do problema.
Uma vez definida a motivação para seu uso é mostrado que a programação funcional gira em torno do uso de funções, onde uma função é algo que recebe uma entrada e devolve uma saída. Tendo isso em mente deve-se mudar a maneira em que se pensa na resolução de um problema. Ao invés de pensar exatamente como cada processo deve ser feito pra que o problema seja resolvido nota-se que é necessário pensar no fluxo de quais transformações seriam necessárias nos dados para que o problema seja resolvido. É necessário aprender a expressar as soluções em termos de funções. Ao se fazer isso o código fica mais próximo de uma linguagem natural e pode ser entendido e mantido mais facilmente.
As funções utilizadas em programas feitos com o paradigma funcional devem ser puras para diminuir a frequência de erros, facilitar a testagem e manutenção e para que não hajam efeitos colaterais. Anjana define funções puras como sendo aquelas que não fazem nada além de utilizar uma ou mais entradas e utilizar apenas elas para produzir uma saída não havendo mudança externa durante a execução da função e não tendo coisas externas afetando o funcionamento da mesma. Em outras palavras não importa quantas vezes uma função receba a mesma entrada o resultado será sempre o mesmo, isto por vez é o que permite identificar mais facilmente quais funções devem ser mudadas ou onde a manutenção deve ser feita, permite que os dados sejam imutáveis o que por sua vez previne vários erros, e facilita a criação de testes pois os resultados são sempre os esperados.
Uma vez que se garanta que as funções são puras é importante também ver como estão sendo feitas as iterações no programa. Em programação funcional o uso de funções de ordem maior (higher-order functions) podem cumprir esse papel. Essas funções podem receber outras funções como entrada ou ter funções como suas saídas. A palestrante diz que o uso destas funções é semelhante a trata-las como objetos podendo ser criadas camadas e mais camadas de funções. Este uso de funções "aninhadas" pode ser chamado de composição de função e aparece frequentemente quando se utiliza programação funcional.
Outro ponto importante mostrado sobre o paradigma funcional é que por existir essa imutabilidade dos dados existe como consequência o problema de ter que reservar mais recursos sempre que alguma estrutura de dados deve ser modificada. Não se pode apenas modificar um dado em uma estrutura, deve-se criar uma cópia da estrutura de dados como saída da função que a modifica ocupando um novo espaço mesmo que seja necessário mudar apenas um pequeno ajusto. Para resolver este problema de eficiência se utilizam estruturas de dados persistentes. Essas estruturas estão mais adaptadas aos dados imutáveis e se assemelham a grafos ou árvores, reutilizando partes já reservadas de dados para ligar com apenas a parte modificada do novo dado, este processo é conhecido como _structural sharing_ .
Vê-se que o paradigma funcional declarativo é capaz de construir programas sem efeitos colaterais e de mais fácil manutenção, controle, leitura e teste utilizando composição de funções que devem ser puras para que não aconteça o compartilhamento de estados e para que se garanta que os dados não são mutáveis. Muitos de nossos problemas diários poderiam ser resolvidos utilizando o modelo funcional. Por suas características ele traz capacidades, como processamento paralelo, que outros modelos não possuem. Por este motivos é inegável a importância e a utilidade de se aprender a se pensar de maneira funcional.