FP vs OOP

Programação funcional está finalmente chegando ao “mainstream” dos desenvolvedores, já não é mais algo hipster. Se você está começando a se interessar por funcional é provável que já tenha recebido indicação para estudar Haskell, aquela linguagem na qual você provavelmente não vai conseguir um trabalho.

Haskell é uma linguagem puramente funcional e por isso normalmente se indica ela para aprendizado do paradigma. Acho que faz todo sentido aprender um novo paradigma numa linguagem que não te dê espaço para fugir dele. Para programar em Haskell você é obrigado a pensar “funcionalmente”. Isso é uma escolha da linguagem. Haskell se sai bem como uma linguagem puramente funcional e não tem um grande espaço no mercado corporativo justamente por não ser “general purpose” como as linguagens mainstreams da atualidade, que estão absorvendo features de programação funcional, inspiradas em linguagens como Haskell.

Smalltalk teve um papel parecido na história. É uma linguagem puramente orientada à objetos e foi a grande responsável por popularizar o paradigma, que posteriormente foi incorporado por outras linguagens que até então eram basicamente imperativas.

Em resumo, o que a curta história da programação nos mostra é que as linguagens multiparadigmas (funcional, imperativo, orientado à objetos) possuem maior escala de adoção e longevidade no mercado do que aquelas que são “puristas” (como Haskell e Smalltalk). Portanto, quando estamos falando de uma linguagem “functional-first” (ao invés de “functional only”) geralmente estamos falando de algo que é multiparadigma, ou seja, na prática estamos falando de algo não binário e sim de uma espécie de “slider” do quão OOP ou FP a linguagem é:

C#, por exemplo, é uma linguagem que possui muitos aspectos de programação funcional mas que está mais voltada para a esquerda nesse slider (se movendo mais pra direita a cada release). Já F# está claramente mais para a direita e por isso é considerada uma linguagem functional-first. Entretanto, ainda assim é possível escrever um código orientado à objetos conciso e legível em F#.

Meu palpite para F# não ser tão popular mesmo entre os desenvolvedores .NET se dá ao fato de C# ser uma linguagem razoavelmente boa e que segue em rápido avanço. Olhando pro lado da stack JVM, acredito que um fator que influencou a popularização e criação de diversas linguagens alternativas seja a inconformação às restrições do Java, que por ser uma linguagem com mais de 20 anos de mercado (e que até então mantia retrocompatibilidade com as versões anteriores) acabou por ter uma evolução lenta em comparação as linguagens mais recentes.

Esses são os meus 2 centavos sobre o assunto. Ultimamente tenho trabalhado com Kotlin, que é uma linguagem híbrida muito familiar para programadores que vem de linguagens tradicionais como Java, C# e até mesmo Ruby (apensar de ser uma linguagem dinâmica, o que por si só é outro universo). É uma linguagem bem moderna para se utilizar em códigos orientados à objetos e também atende bem ao approach funcional. Tenho utilizado diversas features de programação funcional em Kotlin, através de sua standard library e também com a ajuda de libs de extensão como o Arrow. Logo terão posts aqui no blog falando mais sobre esses assuntos…

comments powered by Disqus