DEV Community

Leticia @levxyca
Leticia @levxyca

Posted on

Vamos falar sobre programação funcional? Uma abordagem diferente para resolver problemas.

Vamos falar sobre programação funcional? Eu comecei minha jornada na programação com POO (Programação Orientada a Objetos), e recentemente tenho explorado o mundo da programação funcional. Mudar a chavinha e enxergar problemas com uma abordagem completamente diferente tem sido uma experiência 🤯.

Se você ainda não está familiarizado com os paradigmas de programação, uma forma simples de entendê-los é como abordagens que definem como estruturamos o código para resolver problemas. Cada paradigma tem suas próprias regras e formas de pensar.

No caso da programação funcional, o foco está em funções puras e imutabilidade — dois conceitos fundamentais que tornam o código mais previsível e fácil de manter. Diferente da POO, aqui você não descreve ao computador como fazer algo, mas o que precisa ser feito. Vamos conhecer alguns dos conceitos mais importantes desse paradigma:

Imutabilidade

Os dados são imutáveis. Isso significa que, uma vez definidos, eles não podem ser modificados. Em vez de atualizar o estado de uma variável, você cria uma nova versão dela. Essa característica reduz efeitos colaterais e facilita o desenvolvimento de aplicações concorrentes.

Imutabilidade e concorrência: um casamento perfeito

Em aplicações concorrentes, onde várias partes do código podem executar simultaneamente, a mutabilidade de dados pode ser um pesadelo. Imagine que duas threads acessem e modifiquem o mesmo objeto. Isso pode levar a condições de corrida, onde o resultado final depende da ordem em que as threads executam, gerando comportamentos inesperados e difíceis de depurar.

A imutabilidade resolve esse problema de forma elegante. Cada thread trabalha com sua própria cópia dos dados, garantindo que o estado do programa permaneça consistente e previsível, mesmo em cenários de alta concorrência.

Funções Puras

Funções puras sempre retornam o mesmo resultado para os mesmos argumentos e não causam efeitos colaterais externos, como modificar variáveis globais ou interagir com o sistema de arquivos.

Exemplo: Uma função que soma dois números é pura, pois sempre retorna o mesmo resultado sem alterar nada fora de seu escopo.

Funções puras: testes simplificados e código mais confiável

Como elas não têm efeitos colaterais e sempre retornam o mesmo resultado para as mesmas entradas, testá-las é muito mais simples. Basta fornecer as entradas e verificar se a saída corresponde ao esperado. Não é preciso se preocupar com o estado do programa ou com interações com o mundo externo.

Além disso, as funções puras são mais fáceis de entender e depurar. Como elas não modificam o estado do programa, é mais fácil isolar a causa de um erro e prever o comportamento do código. Isso torna o código mais confiável e manutenível a longo prazo.

Recursão

Em vez de usar loops como em linguagens imperativas, a programação funcional usa a recursão para resolver problemas, dividindo-os em subproblemas menores e chamando a função dentro dela mesma até atingir a solução.

Exemplo em Clojure:

(defn contagem-regressiva [n]
  (if (<= n 0)
    (println "A contagem terminou.")
    (do
      (println n)
      (contagem-regressiva (- n 1)))))

(contagem-regressiva 5)
Enter fullscreen mode Exit fullscreen mode

Funções de Primeira Classe

Elas podem ser passadas como argumentos para outras funções, retornadas como resultados e atribuídas a variáveis.

Vamos conversar? 💬

A programação funcional tem muito a oferecer. Se você está começando a explorar esse universo, Clojure pode ser uma excelente escolha para colocar esses conceitos em prática.

Quero saber: você já usou programação funcional no seu dia a dia? Qual conceito achou mais interessante ou desafiador? 🤔

Curtiu a ideia de usar Clojure? Em um próximo artigo, vou falar sobre como começar com Clojure se você vem de linguagens como Python ou JavaScript, destacando diferenças, semelhanças e como migrar sua forma de pensar. Fique de olho!

Deixe um comentário ou entre em contato comigo. Minhas DMs estão sempre abertas para conversarmos sobre tecnologia e programação ⭐

https://www.levxyca.com/

Top comments (0)