SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
MSP Tech Days
Programação
Funcional
F#
Gustavo Bellini
Bigardi
Desenvolvedor .NET
Java, GoLang, JS
https://about.me/gbb
igardi/
Programação Funcional
Novo paradigma
Mais um...............
No paradigma funcional eu não dito ao meu
código o que ele deve fazer, quando e como. Não
irei desenvolvê-lo passo a passo. Eu penso meu
código como uma sequência de funções e/ou
passos, as quais de maneira composta irão
resolver meu problema.
f(x) -> f(y) -> f(z) -> f(n)...
Metáfora do lenhador
Funções puras
Uma função pura é aquela que não provoca
efeitos colaterais, ou seja, ela não muda
qualquer estado na aplicação. Mas não é só isto,
ela precisa sempre gerar o mesmo resultado com
os mesmos argumentos, ou seja, ela precisa ser
completamente determinística.
ElevarNumberoAoQuadrado(int x)
SomarUmAoNumero(int x)
Na programação funcional, desenvolvemos
funções lidando com os parâmetros de
entrada e gerando resultados, sem
alterarmos o estado de coisas preexistentes
no programa
Imutabilidade quer dizer
Previsibilidade!
Programas previsíveis significam
programas que os processadores
vão lidar melhor
Entenda comigo: se eu sei que, ao
invocar essa função, eu terei um
número de retorno, eu sei que irei
lidar com números. E se eu for
passar para um outra função um
número, mas ela espera uma string,
eu já logo acuso um erro.
Isso faz com que seu
programa se torne mais
inteligente!
Thanks!
Abstração acima de tudo!
Primeiramente, o que seria, em
termos de código, uma abstração?
A implementação de uma função
para um determinado bloco de
código a ser utilizado e reutilizado.
Quais as vantagens da abstração?
• Você estará reaproveitando código. Menos código com mais
informações. Isso é bom.
• O processo todo em que as funções foram abstraídas irão fazer
sentido para você. Isso, alinhado com um bom nome para as funções,
deixarão o seu código muito legível e de fácil compreensão.
• E aí vem a parte legal. Lembre-se quando falei sobre a inteligência do
código... Seu processador já vai saber que dado um número 6, ele
terá como retorno um número 5. A previsibilidade aqui faz a festa.
Benefícios
• Imutabilidade;
• Maior previsibilidade no comportamento;
• Facilidade de extensão;
• Melhora na testabilidade;
Desafios
• Maneira de pensar e projetar diferente;
• Exige adaptação ao dia-a-dia;
• Algumas linguagens ainda não são 100% adequadas;
F#
O F# é a resposta da
Microsoft para o
paradigma funcional
dentro de plataforma
.NET
F# é uma linguagem bastante
concisa e o código possui pouco
ruído. Ou seja, parênteses são
pouco utilizados, blocos de código
são separados por indentação, não
utiliza chaves e a quebra de linhas,
por si só, já é o delimitador.
Características bastante importantes e decisivas na
escolha do F# como linguagem são:
• Concisão;
• Simplicidade;
• Facilidade;
• Proteção contra erros;
• Facilidade com paralelismo
DEMO
https://github.com/gustavobigardi/demo-
fsharp-msp-tech-days
MSP Tech Days - Programação Funcional em F

Mais conteúdo relacionado

Mais procurados

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...tdc-globalcode
 
Lógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataLógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataRodrigofn
 
Introdução á programação - 1ª parte
Introdução á programação - 1ª parteIntrodução á programação - 1ª parte
Introdução á programação - 1ª parteLuis Fernandes
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
02 - Introdução a lógica de programação parte 2 - v1.2
02 - Introdução a lógica de programação parte 2 - v1.202 - Introdução a lógica de programação parte 2 - v1.2
02 - Introdução a lógica de programação parte 2 - v1.2César Augusto Pessôa
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
Curso de php básico - Aula 01
Curso de php básico - Aula 01Curso de php básico - Aula 01
Curso de php básico - Aula 01Felipe Campos
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosRoney Sousa
 
Dojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoDojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoGustavo Barbosa
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 

Mais procurados (20)

Dynamic Types no C# 4.0
Dynamic Types no C# 4.0Dynamic Types no C# 4.0
Dynamic Types no C# 4.0
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
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...
 
C++
C++C++
C++
 
Mulheres desenvolvendo C#
Mulheres desenvolvendo C#Mulheres desenvolvendo C#
Mulheres desenvolvendo C#
 
Lógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big dataLógica de programação, algoritmos e big data
Lógica de programação, algoritmos e big data
 
Introdução á programação - 1ª parte
Introdução á programação - 1ª parteIntrodução á programação - 1ª parte
Introdução á programação - 1ª parte
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
02 - Introdução a lógica de programação parte 2 - v1.2
02 - Introdução a lógica de programação parte 2 - v1.202 - Introdução a lógica de programação parte 2 - v1.2
02 - Introdução a lógica de programação parte 2 - v1.2
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
A Arte do Código Limpo
A Arte do Código LimpoA Arte do Código Limpo
A Arte do Código Limpo
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
Capitulo 5
Capitulo 5Capitulo 5
Capitulo 5
 
134
134134
134
 
Php, por onde começar
Php, por onde começar Php, por onde começar
Php, por onde começar
 
Curso de php básico - Aula 01
Curso de php básico - Aula 01Curso de php básico - Aula 01
Curso de php básico - Aula 01
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - Algoritmos
 
Dojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoDojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - Introdução
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 

Semelhante a MSP Tech Days - Programação Funcional em F

A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaGabriel Schade Cardoso
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003Edgar Silva
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshopguestd37c23
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Developer Academy
 
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-2013Gabriel Rubens
 
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em RecifeO XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em RecifePaulo Caroli
 
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife Paulo Caroli
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareDextra Sistemas / Etec Itu
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingMarcelo Láias
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 
Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para LinuxChris x-MS
 
Como usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoComo usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoEvandro da Silva Amparo
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 

Semelhante a MSP Tech Days - Programação Funcional em F (20)

A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-dia
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003Aplicando  eXtreming Programing  ao cenário do  Borland ALM - BorCon 2003
Aplicando eXtreming Programing ao cenário do Borland ALM - BorCon 2003
 
Refactory Worshop
Refactory WorshopRefactory Worshop
Refactory Worshop
 
Refatorar é preciso! 2.0
Refatorar é preciso! 2.0Refatorar é preciso! 2.0
Refatorar é preciso! 2.0
 
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
Apresentação do Workshop BDD (Desenvolvimento Guiado por Comportamento) com V...
 
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
 
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em RecifeO XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
 
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
O XP não é contra Design com Paulo Caroli, Café Ágil em Recife
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Aula de C para Linux
Aula de C para LinuxAula de C para Linux
Aula de C para Linux
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Como usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu códigoComo usar IA para melhorar a qualidade do seu código
Como usar IA para melhorar a qualidade do seu código
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
Aula 4- Engenharia de Software
Aula 4- Engenharia de SoftwareAula 4- Engenharia de Software
Aula 4- Engenharia de Software
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 

Mais de Gustavo Bellini Bigardi

Canal DotNet - Design Patterns - Mediator
Canal DotNet - Design Patterns - MediatorCanal DotNet - Design Patterns - Mediator
Canal DotNet - Design Patterns - MediatorGustavo Bellini Bigardi
 
Aplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaAplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaGustavo Bellini Bigardi
 
MVP Week 2020 - Aplicações Modernas com Blazor WASM
MVP Week 2020 - Aplicações Modernas com Blazor WASMMVP Week 2020 - Aplicações Modernas com Blazor WASM
MVP Week 2020 - Aplicações Modernas com Blazor WASMGustavo Bellini Bigardi
 
Codificando Night Week - Blazor, tornando o fullstack C# possível!
Codificando Night Week - Blazor, tornando o fullstack C# possível!Codificando Night Week - Blazor, tornando o fullstack C# possível!
Codificando Night Week - Blazor, tornando o fullstack C# possível!Gustavo Bellini Bigardi
 
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & Blockchain
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & BlockchainIgnite The Tour 2019 - Sao Paulo - Blazor, AI & Blockchain
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & BlockchainGustavo Bellini Bigardi
 
Microsservicos serverles combinacao perfeita
Microsservicos serverles combinacao perfeitaMicrosservicos serverles combinacao perfeita
Microsservicos serverles combinacao perfeitaGustavo Bellini Bigardi
 
Microsservicos com node js + azure functions + azure service bus
Microsservicos com node js + azure functions + azure service busMicrosservicos com node js + azure functions + azure service bus
Microsservicos com node js + azure functions + azure service busGustavo Bellini Bigardi
 
Microsserviços com Serverles e Azure Functions
Microsserviços com Serverles e Azure FunctionsMicrosserviços com Serverles e Azure Functions
Microsserviços com Serverles e Azure FunctionsGustavo Bellini Bigardi
 
Blazor and azure functions for serverless websites
Blazor and azure functions for serverless websitesBlazor and azure functions for serverless websites
Blazor and azure functions for serverless websitesGustavo Bellini Bigardi
 
Implementando rapidamente web apps com blazor e serverless
Implementando rapidamente web apps com blazor e serverlessImplementando rapidamente web apps com blazor e serverless
Implementando rapidamente web apps com blazor e serverlessGustavo Bellini Bigardi
 
Distribuindo seu app Blazor no Azure com Storage + CDN
Distribuindo seu app Blazor no Azure com Storage + CDNDistribuindo seu app Blazor no Azure com Storage + CDN
Distribuindo seu app Blazor no Azure com Storage + CDNGustavo Bellini Bigardi
 
Esqueca o ETL! Estraindo métricas com CosmosDB e Serverless
Esqueca o ETL! Estraindo métricas com CosmosDB e ServerlessEsqueca o ETL! Estraindo métricas com CosmosDB e Serverless
Esqueca o ETL! Estraindo métricas com CosmosDB e ServerlessGustavo Bellini Bigardi
 
Blazor, web assembly e o futuro do browser
Blazor, web assembly e o futuro do browserBlazor, web assembly e o futuro do browser
Blazor, web assembly e o futuro do browserGustavo Bellini Bigardi
 
Serverless com azure functions e node js
Serverless com azure functions e node jsServerless com azure functions e node js
Serverless com azure functions e node jsGustavo Bellini Bigardi
 
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicações
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicaçõesCapiConf Online - Utilizando reconhecimento facial para segurança em aplicações
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicaçõesGustavo Bellini Bigardi
 
Meetup - FC Nuvem - Serviços Cognitivos
Meetup - FC Nuvem - Serviços CognitivosMeetup - FC Nuvem - Serviços Cognitivos
Meetup - FC Nuvem - Serviços CognitivosGustavo Bellini Bigardi
 

Mais de Gustavo Bellini Bigardi (20)

Canal DotNet - Design Patterns - Mediator
Canal DotNet - Design Patterns - MediatorCanal DotNet - Design Patterns - Mediator
Canal DotNet - Design Patterns - Mediator
 
Aplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache KafkaAplicações Distribuídas com .NET e Apache Kafka
Aplicações Distribuídas com .NET e Apache Kafka
 
Azure Labs - Publicando APIs no Azure
Azure Labs - Publicando APIs no AzureAzure Labs - Publicando APIs no Azure
Azure Labs - Publicando APIs no Azure
 
MVP Week 2020 - Aplicações Modernas com Blazor WASM
MVP Week 2020 - Aplicações Modernas com Blazor WASMMVP Week 2020 - Aplicações Modernas com Blazor WASM
MVP Week 2020 - Aplicações Modernas com Blazor WASM
 
Codificando Night Week - Blazor, tornando o fullstack C# possível!
Codificando Night Week - Blazor, tornando o fullstack C# possível!Codificando Night Week - Blazor, tornando o fullstack C# possível!
Codificando Night Week - Blazor, tornando o fullstack C# possível!
 
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & Blockchain
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & BlockchainIgnite The Tour 2019 - Sao Paulo - Blazor, AI & Blockchain
Ignite The Tour 2019 - Sao Paulo - Blazor, AI & Blockchain
 
DevPira2019 - Blazor
DevPira2019 - BlazorDevPira2019 - Blazor
DevPira2019 - Blazor
 
Dev week2019 blazor
Dev week2019 blazorDev week2019 blazor
Dev week2019 blazor
 
Microsservicos serverles combinacao perfeita
Microsservicos serverles combinacao perfeitaMicrosservicos serverles combinacao perfeita
Microsservicos serverles combinacao perfeita
 
Microsservicos com node js + azure functions + azure service bus
Microsservicos com node js + azure functions + azure service busMicrosservicos com node js + azure functions + azure service bus
Microsservicos com node js + azure functions + azure service bus
 
Microsserviços com Serverles e Azure Functions
Microsserviços com Serverles e Azure FunctionsMicrosserviços com Serverles e Azure Functions
Microsserviços com Serverles e Azure Functions
 
Blazor and azure functions for serverless websites
Blazor and azure functions for serverless websitesBlazor and azure functions for serverless websites
Blazor and azure functions for serverless websites
 
Implementando rapidamente web apps com blazor e serverless
Implementando rapidamente web apps com blazor e serverlessImplementando rapidamente web apps com blazor e serverless
Implementando rapidamente web apps com blazor e serverless
 
Distribuindo seu app Blazor no Azure com Storage + CDN
Distribuindo seu app Blazor no Azure com Storage + CDNDistribuindo seu app Blazor no Azure com Storage + CDN
Distribuindo seu app Blazor no Azure com Storage + CDN
 
Esqueca o ETL! Estraindo métricas com CosmosDB e Serverless
Esqueca o ETL! Estraindo métricas com CosmosDB e ServerlessEsqueca o ETL! Estraindo métricas com CosmosDB e Serverless
Esqueca o ETL! Estraindo métricas com CosmosDB e Serverless
 
Blazor, web assembly e o futuro do browser
Blazor, web assembly e o futuro do browserBlazor, web assembly e o futuro do browser
Blazor, web assembly e o futuro do browser
 
Serverless com azure functions e node js
Serverless com azure functions e node jsServerless com azure functions e node js
Serverless com azure functions e node js
 
Fullstack C# com Blazor
Fullstack C# com BlazorFullstack C# com Blazor
Fullstack C# com Blazor
 
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicações
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicaçõesCapiConf Online - Utilizando reconhecimento facial para segurança em aplicações
CapiConf Online - Utilizando reconhecimento facial para segurança em aplicações
 
Meetup - FC Nuvem - Serviços Cognitivos
Meetup - FC Nuvem - Serviços CognitivosMeetup - FC Nuvem - Serviços Cognitivos
Meetup - FC Nuvem - Serviços Cognitivos
 

MSP Tech Days - Programação Funcional em F