SlideShare uma empresa Scribd logo
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?

Mais conteúdo relacionado

Mais procurados

4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
Péricles Miranda
 

Mais procurados (20)

4 introdução ao paradigma funcional
4 introdução ao paradigma funcional4 introdução ao paradigma funcional
4 introdução ao paradigma funcional
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Introdução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHPIntrodução ao desenvolvimento com PHP
Introdução ao desenvolvimento com PHP
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
DDD linguagem ubiqua + codigo expressivo
DDD  linguagem ubiqua + codigo expressivoDDD  linguagem ubiqua + codigo expressivo
DDD linguagem ubiqua + codigo expressivo
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Aula02
Aula02Aula02
Aula02
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Paradigma funcional até leigos podem entender
Paradigma funcional até leigos podem entenderParadigma funcional até leigos podem entender
Paradigma funcional até leigos podem entender
 
Aula02
Aula02Aula02
Aula02
 
Funções em C - Prof. Yandre
Funções em C - Prof. YandreFunções em C - Prof. Yandre
Funções em C - Prof. Yandre
 
TDC2017 | POA Trilha Programcao Funcional - Paradigma funcional até leigos po...
TDC2017 | POA Trilha Programcao Funcional - Paradigma funcional até leigos po...TDC2017 | POA Trilha Programcao Funcional - Paradigma funcional até leigos po...
TDC2017 | POA Trilha Programcao Funcional - Paradigma funcional até leigos po...
 
Thiago silva barros_1102133_ads_640_padrao_adapter
Thiago silva barros_1102133_ads_640_padrao_adapterThiago silva barros_1102133_ads_640_padrao_adapter
Thiago silva barros_1102133_ads_640_padrao_adapter
 
Aula 04
Aula 04Aula 04
Aula 04
 
Clean code
Clean codeClean code
Clean code
 
Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
 

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

Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Gabriel Rubens
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Gabriel Rubens
 

Semelhante a A importância da programação funcional no dia a-dia (20)

MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#MSP Tech Days 2018 - Programação Funcional com F#
MSP Tech Days 2018 - Programação Funcional com F#
 
Orientação a Aspectos em PHP
Orientação a Aspectos em PHPOrientação a Aspectos em PHP
Orientação a Aspectos em PHP
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
Profissoa programador-praticas-para-melhoria-continua-fatec-santos-outubro-2013
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Análise de sistemas oo 1
Análise de sistemas oo   1Análise de sistemas oo   1
Análise de sistemas oo 1
 
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
TDC2018SP | Trilha Modern Web - Programacao funcional com Javascript - Seu co...
 
134
134134
134
 
Macro br
Macro brMacro br
Macro br
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Boas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_softwareBoas praticas em_desenvolvimento_de_software
Boas praticas em_desenvolvimento_de_software
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
Profissao-programador-praticas-para-melhoria-continua-unimonte-outubro-2013
 
Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para Linux
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Logica Programação. ...
Logica Programação. ...Logica Programação. ...
Logica Programação. ...
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 

Mais de Gabriel Schade Cardoso

Mais de Gabriel Schade Cardoso (16)

Usando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em LibrasUsando Visão Computacional para Identificar Letras em Libras
Usando Visão Computacional para Identificar Letras em Libras
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
Clean Architecture com .NET Core
Clean Architecture com .NET CoreClean Architecture com .NET Core
Clean Architecture com .NET Core
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
 
Machine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & PythonMachine Learning: Classificação de Comentários com Azure ML & Python
Machine Learning: Classificação de Comentários com Azure ML & Python
 
Desmistificando Machine Learning
Desmistificando Machine LearningDesmistificando Machine Learning
Desmistificando Machine Learning
 
Programação Funcional usando C# e F#
Programação Funcional usando C# e F#Programação Funcional usando C# e F#
Programação Funcional usando C# e F#
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
 
Programação Funcional para Humanos
Programação Funcional para HumanosProgramação Funcional para Humanos
Programação Funcional para Humanos
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 
Aplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive ServicesAplicações inteligentes com o Azure Cognitive Services
Aplicações inteligentes com o Azure Cognitive Services
 
Abordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NETAbordagem Funcional para Gerenciamento de Erros em .NET
Abordagem Funcional para Gerenciamento de Erros em .NET
 
Desmistificando machine learning
Desmistificando machine learningDesmistificando machine learning
Desmistificando machine learning
 
Uma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de errosUma abordagem funcional para gerenciamento de erros
Uma abordagem funcional para gerenciamento de erros
 
TDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com KinectTDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com Kinect
 
Desenvolvendo com Kinect
Desenvolvendo com KinectDesenvolvendo com Kinect
Desenvolvendo com Kinect
 

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