DEV Community

Leticia @levxyca
Leticia @levxyca

Posted on

1 1 1 1 1

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/

Image of Docusign

Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more