mais lidos
Life at Nu
Conheça a sede do Nubank em Pinheiros, São Paulo/Brasil jan 11
Design
A nova aparência do Nubank: conheça nossa nova logo maio 17
Culture & Values
Como os valores e a cultura da Nu moldam os produtos que criamos ago 7
Carreiras
Reunimos grandes mentes de diversas origens que permitem a discussão e o debate e melhoram a resolução de problemas.
Saiba mais sobre nossas carreiras



Se você trabalha com tecnologia ou tem alguma curiosidade sobre a área, você provavelmente já ouviu falar de programação funcional. Não é nenhuma novidade, mas está recebendo cada vez mais atenção devido às mudanças tecnológicas pelas quais estamos passando.
O que é programação funcional?
A programação funcional é um paradigma de programação, ou seja, é o modo de se fazer algo. Em programação, é a metodologia usada para escrever códigos.
O paradigma funcional é baseado em um modelo muito antigo de computação chamado cálculo lambda. O cálculo lambda foi criado em 1930 por Alonzo Church (professor do famoso matemático Allan Turing) e ele se tornou a base para a criação do LISP, uma família de linguagens de programação desenvolvida por John McCarthy em 1958.
Para saber o que é a programação funcional, no entanto, é importante entender outros famosos paradigmas de programação: programação imperativa e programação orientada a objetos (POO).
Conheça nossas oportunidades
Programação Imperativa
O paradigma mais famoso da programação. Em linguagens imperativas, como C e PHP, os códigos são escritos como uma lista de ações ou comandos que são executados por um computador. Eles são como ordens dadas à máquina, por isso é chamado de programação imperativa.
Programação Orientada a Objetos
Quanto à programação orientada a objetos, um programador cria dados na forma de campos, conhecidos como atributos, e códigos na forma de procedimentos, conhecidos como métodos. Uma das suas características é que o procedimento de um objeto pode acessar ou mesmo mudar os campos de dados do objeto com o qual ele é associado.
Para dar um exemplo simples, imagine que um carro é um objeto e seus atributos são suas portas, cor etc. Você poderia ter um método no qual o procedimento é abrir a porta do carro e o outro é fechar a porta do carro.
Alguns exemplos de linguagem de programação orientada a objetos são Java, Python e Ruby. Outras linguagens, como JavaScript e PHP, têm suporte para orientação a objetos.
Programação Funcional
Quando entendemos outros tipos de paradigma, fica mais fácil entender o paradigma funcional.
Diferente da programação imperativa e da orientada a objetos, a programação funcional considera tudo uma função. Não há uma lista de instruções ou objetos a serem executados pelo computador, mas sim uma sequência de funções matemáticas que juntas resolverão um problema.
Isso significa que no paradigma funcional, as funções são puras, não mudam o estado do objeto e dão ênfase às expressões e declarações, em vez de seguir instruções.
No exemplo com o carro, se criarmos uma função pura para abrir a porta do carro, essa função não mudará o carro, que é a entrada inicial. Você deve usar explicitamente o resultado da função, que seria o carro com a porta aberta, em vez de acessar a entrada inicial, que é o carro com a porta fechada.
Além disso, não há variáveis no paradigma funcional, apenas constantes. Isso se traduz em códigos mais objetivos com constantes que, grosso modo, não mudam. Alguns exemplos de linguagens funcionais são Clojure, Haskell e Elixir.
Quais são os benefícios da programação funcional?
Como foi dito antes, o código na programação funcional tende a ser mais objetivo e mais curto do que em outros tipos de paradigma, porque você é capaz de isolar as funções puras que obterão a lógica de seus negócios das funções que são chamados de mutáveis, que são operações que realmente mudam o objeto, ou seja, podem modificar dados em um banco de dados, por exemplo.
Outro benefício é que, já que ele é baseado em funções matemáticas, o paradigma funcional se vale do conceito de imutabilidade. Um exemplo disso seria uma função matemática simples, como f(x) = x + 2. Sempre que usarmos o mesmo valor para essa função, ele fornecerá um resultado igual e imutável.
Por conta disso, é mais fácil aplicar a manutenção do código e eventuais alterações. É mais simples adicionar testes e isolar uma função para fazer análises e corrigir falhas.
Além disso, linguagens funcionais são mais amigáveis à implementação de computação paralela, o que significa que partes diferentes do sistema serão facilmente executadas por diferentes processadores. Isso pode ser explicado pelo fato de que os códigos são previsíveis e imutáveis, sem efeitos colaterais.
Como usamos a programação funcional no Nubank?
Quando o Nubank foi fundado em 2013, procuramos uma tecnologia que nos ajudasse a alcançar nossos objetivos de negócios, manter a eficiência e expandir de uma maneira segura e sustentável.
Naquele momento, o paradigma funcional parecia ser a melhor opção para os desafios que teríamos que enfrentar. Por causa disso, acabamos adotando o Clojure como a linguagem principal para os nossos serviços e o Datomic como nosso banco de dados.
O paradigma funcional também ajuda com o processo de internacionalizar o Nubank. A lógica do sistema financeiro de um país pode ser diferente da lógica de outro país, mas não será necessário construí-la do zero. Reescrever a lógica do sistema financeiro e reutilizar as outras partes do sistema já é o suficiente.
É importante dizer que usar uma linguagem funcional facilita as coisas, mas ela não é o único elemento necessário para alcançar esse objetivo. O conceito de plataformização que usamos e o modelo C4 também têm influência nisso.
Dessa forma, podemos usar todos os benefícios da programação funcional para construir soluções que devolvam o controle das pessoas sobre o próprio dinheiro, não importa em que país estejam.
Conheça nossas oportunidades