Hoje abordaremos a programação funcional. Mais especificamente, veremos a diferença entre programação declarativa e imperativa.
Primeiro, vamos examinar rapidamente os termos. Em seguida, compararemos esses estilos de programação e veremos como eles aparecem em Java e se a linguagem suporta sua feliz coexistência.
A programação funcional é um paradigma onde as funções são entendidas como funções matemáticas, não como sub-rotinas, como na programação procedural . Ou seja, nesses dois paradigmas interpretam a palavra “função” de forma diferente. Lembre-se disso e não os confunda. Java não deixa você se confundir, pois os subprogramas são chamados de "métodos", enquanto as funções se referem a funções matemáticas (também: funções lambda ou referência de método).
Na prática, na programação procedural, as funções dependem não apenas de variáveis de entrada, mas também de fatores externos (como outras variáveis fora da função ou do estado do sistema). Isso significa que chamar a mesma função com os mesmos argumentos, mas em um contexto diferente, pode produzir resultados diferentes. Na programação funcional, quando uma função é chamada com os mesmos argumentos, ela sempre produz o mesmo resultado, pois as funções dependem apenas dos dados de entrada.
Prós da programação funcional
- Confiabilidade de código aprimorada
- Teste de unidade conveniente
- Oportunidades para otimização de código durante a compilação
- Oportunidades de simultaneidade
Contras da programação funcional
As desvantagens da programação funcional decorrem de todos esses mesmos recursos:
-
Não há instruções de atribuição. Em vez disso, novos valores são armazenados em novas variáveis, levando à necessidade de alocar constantemente e liberar memória automaticamente. Como resultado, a coleta de lixo altamente eficiente é uma parte essencial de qualquer sistema que execute programas funcionais.
-
A avaliação não estrita significa que a ordem das chamadas de função é imprevisível, o que cria problemas de E/S quando a ordem das operações é importante.
Isso conclui nossa rápida revisão da programação funcional. Agora vamos passar para os estilos de programação.
A programação imperativa é um paradigma de programação caracterizado pelas seguintes características:
-
O código-fonte do programa consiste em instruções (declarações).
-
As instruções devem ser seguidas sequencialmente.
-
Os dados gerados pela execução de instruções anteriores podem ser lidos da memória por instruções subsequentes.
-
Os dados obtidos pela execução de uma instrução podem ser gravados na memória.
Aqui estão as principais características das linguagens imperativas:
- Uso de variáveis booleanas.
- Uso do operador de atribuição.
- Uso de expressões compostas.
- Uso de sub-rotinas.
Um programa imperativo é como ordens expressas no modo imperativo em linguagens naturais. Em outras palavras, um programa imperativo é uma sequência de comandos.
As linguagens de programação imperativas incluem C e C++.
A programação declarativa é um paradigma de programação no qual a solução para um problema é especificada. Ou seja, descreve-se o resultado final, não a forma de alcançá-lo. HTML é um exemplo de linguagem declarativa. Ao escrever tags nessa linguagem, não pensamos em como os elementos serão desenhados na página. Apenas descrevemos como a página deve ser.
Outra linguagem de programação declarativa é o SQL.
Vamos comparar os dois estilos de programação considerando um exemplo da vida real: como explicamos a uma pessoa como chegar a um determinado lugar?
Imagine esta situação: um homem vem até nós na rua e pergunta: "Como faço para chegar ao museu?"
Com uma abordagem imperativa, forneceríamos a ele o algoritmo de como chegar lá a pé:
- vire aqui
- andar 2 quarteirões em linha reta
- vire a direita
- …
Com uma abordagem declarativa, simplesmente daríamos o endereço e a pessoa chegaria ao lugar certo por conta própria.
Java é atualmente uma linguagem de programação multiparadigma . Multiparadigma significa que a linguagem suporta vários paradigmas.
Durante sua longa evolução, a linguagem ampliou seu modelo orientado a objetos para que seus usuários tenham diferentes ferramentas e possam escolher a melhor para sua tarefa específica.
Como resultado, o Java suporta atualmente tanto a abordagem imperativa (como escrever código para chamadas de método) quanto a abordagem declarativa (como as anotações disponíveis no tempo de execução).
Vamos resumir:
-
Existem vários paradigmas de programação.
-
Existem abordagens declarativas e imperativas.
-
Você deve escolher aquele que é mais adequado para a tarefa em questão.
-
Java é uma linguagem multiparadigma que suporta ambas as abordagens.
GO TO FULL VERSION