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.