A importância
da programação funcional no
dia-a-dia
GABRIEL SCHADE CARDOSO
Quem é esse tal de Gabriel?
 Bacharel em ciência da computação
 Mestre em computação aplicada
 Microsoft Innovative Educator (MIE)
 Microsoft Specialist (MS)
 C#
 Javascript
 ASP .NET MVC
3
GUI
Sobre mim
 Microsoft Certified Solutions Assiciate (MCSA)
 Web Applications
 Autor dos livros da editora casa do código sobre
os assuntos:
 Kinect
 Windows Phone
 Programação Funcional
4
GUI
Sobre mim
 Desenvolvedor Senior
 Professor
 Revisor
5
GUI
Sobre mim
O que é programação
funcional?
Programação Funcional
 Programação funcional é um paradigma de
programação.
 Enfatiza o uso de funções e evita mudanças de
estados ou dados mutáveis.
Programação Funcional
Quem conhece programação funcional?
Programação Funcional
 Quem conhece programação funcional?
Programação Funcional
 Geralmente poucas pessoas conhecem programação
funcional...
 Mas qual o motivo disso?
Programação Funcional
 O maior complicador sobre o paradigma
funcional é que ele é mais complicado.
 Mentira, não é, mas as pessoas geralmente se
assustam com ele.
Programação Funcional
 Só precisamos aprender:
1. Funtores;
2. Funtores Aplicativos;
3. Currying;
4. Aplicação Parcial;
5. Monads;
6. Monoids;
7. ...
 Mas já precisamos aprender:
1. Interfaces;
2. Polimorfismo;
3. Herança;
4. Encapsulamento;
5. Generics;
6. SOLID;
7. ...
Programação Funcional
São só outro grupo de palavras difíceis
que representam outra forma de pensar
Programação Funcional
 Por que eu decidi aprender programação funcional?
1. Curiosidade;
2. Melhoria contínua;
3. Entediado;
Programação Funcional
A maior dificuldade foi aprender a pensar
de forma diferente.
Programação Funcional
 Quando eu decidi aprender programação funcional eu
ainda não sabia, mas iria mudar completamente a
forma como eu desenvolvia software.
Programação Funcional
 Está cada vez mais comum diferentes linguagens de
programação incorporarem implementações que
seguem o paradigma funcional.
Programação Funcional
 Programação funcional é um paradigma de
programação bastante diferente do paradigma
orientado à objetos.
 Apesar de serem distintos, é muito comum
coexistirem na mesma aplicação.
Programação Funcional
 Alguns conceitos fundamentais:
1. Funções são membros de primeira ordem;
2. Reforce expressões e composições;
3. Crie códigos expressivos com tipos;
Funções como
membros de primeira
ordem
Programação Funcional
 O que significa ser um membro de primeira ordem?
 De forma resumida, agora as funções também são
coisas.
 Como assim?
Programação Funcional
 Elas não precisam pertencer à uma classe;
 Elas podem ser passadas por parâmetro;
 Elas podem ser retornadas;
 Elas podem ser utilizadas como tipos.
Programação Funcional
 Em F# as funções são valores como qualquer outro;
 Em C#, delegates são para funções, o que classes
são para objetos.
Programação Funcional
 Permitindo que uma função possa ser passada por
parâmetro abrimos um leque de possibilidades de
abstrações.
Programação Funcional
Programação Funcional
Programação Funcional
Programação Funcional
Programação Funcional
Programação Funcional
 Com este tipo de abstração, podemos inclusive
incrementar uma função/método, sem alterar o corpo
da função.
Programação Funcional
 Veja esta função simples para calcular a sequência
Fibonacci:
Programação Funcional
 Quero além de calcular o Fibonacci, exibir o resultado
no console, como fazer?
Programação Funcional
 Agora quero fazer a mesma operação, mas para uma
soma...
Programação Funcional
 Ok, vamos tornar mais abstrato!
Programação Funcional
 Agora podemos gerar novos métodos!
Programação Funcional
 E já podemos ver o resultado!
Programação Funcional
 E para o caso da soma?
Programação Funcional
 E para o caso da soma?
Código Expressivo!
Código expressivo
 Existem diversas definições para código
expressivo.
“O código precisa expressar a linguagem mais
humana possível”
Código expressivo
 Se um veículo tem uma descrição, o tipo/classe
que o representa, precisa ter uma propriedade
chamada descrição e não título ou nome.
Código expressivo
 Este é o nível mais básico de expressividade,
podemos ir muito além e alcançar o nível bem
mais avançado.
Modelando o domínio!
Código expressivo
 Vamos para um exemplo em outro domínio mais
simples: um jogo de baralho, como pife, por
exemplo.
Código expressivo
 Sabemos que uma partida de baralho possui os
seguintes elementos:
 Cartas
 Baralho
 Jogadores
Código expressivo
 Cartas são compostas por uma combinação de
valor + naipe...
 Quais são os valores possíveis?
 Quais são os naipes possíveis?
Código expressivo
Código expressivo
 E o resto?
Código expressivo
 Tudo certo!
 Será mesmo?
Código expressivo
Código expressivo
 Após a implementação deste domínio
precisamos implementar o comportamento de
comprar uma carta.
Código expressivo
 Esta modelagem, não impede isso...
Código expressivo
 Sugestões de solução?
 Passar a partida por parâmetro?
 Criar um classe para baralho e outra para a mão?
Tipagem com alias e F#!
Tipagem
 O paradigma funcional reforça bastante o uso
de tipos ao invés de classes.
 Vamos para a mesma modelagem!
Tipagem
Tipagem
Não são enums!
Tipagem
Produto escalar
de tipos!
Tipagem
Guardam valores do
Mesmo tipo, mas
Possuem nomes
diferentes
Tipagem
Tipagem
 Escreve-se menos código e conseguimos
modelar de forma melhor...
 Veja o mesmo exemplo do método de comprar
cartas:
Tipagem
 Esta modelagem, impede:
Programação Funcional
 Este poder de abstração permite criar inclusive novas
estruturas;
 Uma nova maneira de desenvolver abre as
possibilidades para resolução de problemas;
 A criação das bibliotecas de diversas linguagens
utilizam uma abordagem híbrida;
Programação Funcional
 Utilizo diariamente os conceitos deste paradigma
para ser mais produtivo, padronizar comportamentos e
aumentar o poder de extensão dos projetos em que
trabalho.
Programação Funcional
 Existem muito mais conceitos por trás deste
paradigma, mas por hoje é só!
Me encontre em
/gabrielschade
/gabrielschade
/gabrielschade
/gabrielschade
https://gabrielschade.github.io
Perguntas?

A importância da programação funcional no dia a-dia