SlideShare uma empresa Scribd logo
Gabriel Schade cardoso
MVPSoftwareEngineereEscritor
Gabriel.Schade@outlook.com
Programação funcional
usando C# e F#
#msptechday
GabrielSchadecardoso
# msptechday
 Mestre em Computação Aplicada (IA)
 Microsoft MVP – Dev. Technologies
 Software Engineer
 Revisor
 Escritor
ProgramaçãofuncionalusandoC#eF#
# msptechday
 Quem aqui sabe o que é programação funcional?
 Quem aqui já usou programação funcional?
 Quem aqui já usou programação funcional no trabalho?
ProgramaçãofuncionalusandoC#eF#
# msptechday
 Programação funcional é difícil
ProgramaçãofuncionalusandoC#eF#
# msptechday
 Programação funcional é diferente
ProgramaçãofuncionalusandoC#eF#
# msptechday
 Interfaces
 Polimorfismo
 Herança
 Encapsulamento
 Generics
 SOLID
 ...
 Funtores;
 Funtores Aplicativos;
 Currying;
 Aplicação Parcial;
 Monads;
 Unions;
 ...
ProBLEMASCOMUNS
 Quem aqui já encontrou esse erro?
 ArgumentNullException
 NullPointerException
# msptechday
Comoessasduascoisasestãoconectadas?
 Programação funcional é bem diferente de
programação orientada à objetos;
 Podemos aprender muito com o F#;
 É um paradigma diferente.
# msptechday
Comoessasduascoisasestãoconectadas?
 Ao aprender um novo paradigma, você aprende uma
nova forma de ver os problemas.
# msptechday
Vamos ao problema do null
 Veja este método:
 O que ele tem de errado?
# msptechday
Vamos ao problema do null
 Ele é um método mentiroso
 A assinatura dele me diz que ele irá retornar um
usuário, mas e se o id informado for inválido?
# msptechday
Vamos ao problema do null
 Veja este método:
 O que é um User option?
# msptechday
Vamos ao problema do null
 Este é um método honesto, ele indica que talvez ele
retorne um usuário;
 Ok, mas e nossa vida, no que muda?
# msptechday
Vamos ao problema do null
 Mas isso não é só um null check obrigatório?
 Quase, mas causa erro de compilação.
 O erro acontece porque o tipo option é um value
container de algum tipo e não o tipo em si.
# msptechday
Value Container
 Já ouviram falar?
# msptechday
Value Container
 Um container pode ser visto como um envelope ou
uma caixa que circunda um objeto/valor, colocando-o
em algum contexto específico.
 Lidamos com este tipo de valor o tempo todo:
 List;
 Task;
 Nullable.
# msptechday
Value Container
 Imagine o seguinte cenário: você possui um dado do
tipo inteiro e precisa somá-lo com o valor 3.
# msptechday
Value Container
 E se este mesmo número estiver em um array? Mesmo
que sozinho...
# msptechday
Value Container
 Não podemos realizar a soma diretamente com o
valor, por conta do contexto que o cerca.
 Por isso, comumente temos uma função para remover
o valor de seu contexto.
# msptechday
Value Container
 No caso do array podemos utilizar o indexador para
extrair um elemento do contexto:
# msptechday
Value Container
 E para o caso onde precisamos aplicar a operação
para o array inteiro?
# msptechday
Value Container
 E para o caso onde precisamos aplicar a operação
para o array inteiro?
# msptechday
Value Container
 E para o caso onde precisamos aplicar a operação
para o array inteiro?
# msptechday
Value Container
 Geralmente utilizamos as funções ou comparação de
padrões (pattern matching) para alterar o contexto dos
valores.
 Podemos nos aproveitar deste conceito para criar
novos objetos e classes que armazenam valores sob
um determinado contexto.
# msptechday
Value Container
 Que tal criar um Option para o C#?
1. O tipo não pode assumir o valor null;
2. Precisamos de uma maneira de extrair a informação do
contexto;
3. Não deixaremos o programador acessar a informação,
caso ela esteja no estado inválido;
# msptechday
Value Container
# msptechday
Utilizando o Option
 Como extrair o valor?
# msptechday
Utilizando o Option
 Que tal criar um pattern matching?
# msptechday
Utilizando o Option
 O usuário precisará lidar com os dois casos sempre:
# msptechday
Utilizando o Option
 Utilize cast implícito para facilitar a criação destes
valores:
# msptechday
Utilizando o Option
# msptechday
modelagem de Domínio
# msptechday
 Union types;
 Unidades de medida;
modelagem de Domínio
# msptechday
modelagem de Domínio
# msptechday
modelagem de Domínio
# msptechday
modelagem de Domínio
# msptechday
 O F# também compreende multiplicação entre
unidades:
Extração de dados externos
# msptechday
 Importação de tabelas do Excel;
 Explorando o mundo com o World Bank;
 Leitura de dados de uma página HTML;
Extração de dados – Excel
# msptechday
 Importar informações para um sistema desenvolvido
em C#
Extração de dados - Excel
# msptechday
Extração de dados - Excel
# msptechday
Extração de dados - Excel
# msptechday
Extração de dados – World Bank
# msptechday
 Informações públicas sobre os países;
 http://www.worldbank.org/
Extração de dados – World Bank
# msptechday
Extração de dados – World Bank
# msptechday
Extração de dados – World Bank
# msptechday
Extração de dados – World Bank
# msptechday
Extração de dados – World Bank
# msptechday
Extração de dados – HTML
# msptechday
 Extrair informações de um site, como a Wikipedia
Extração de dados - HTML
# msptechday
Extração de dados - HTML
# msptechday
Extração de dados - HTML
# msptechday
Extração de dados - HTML
# msptechday
TANGO – Open source
 Github.com/gabrielschade/Tango
 E-book gratuito em português e
inglês
 https://gabrielschade.github.io/tan
go-br
MUITO OBRIGADO
/gabrielschade
/gabrielschade
https://gabrielschade.github.io

Mais conteúdo relacionado

PDF
Estrutura de repetição com Ruby[AULA-3]
PPTX
Algoritmo e lógica de programação - aula 3
PPTX
Algoritmo e lógica de programação - aula 6
PDF
Logica de programação. introdução[AULA-1]
PDF
Alg aula 03 - construcao algoritmos2 tp1
PPSX
Programação em C
PDF
Descritiva Narrativa (Lógica de Programação)
PDF
Excel VBA: Aula 9
Estrutura de repetição com Ruby[AULA-3]
Algoritmo e lógica de programação - aula 3
Algoritmo e lógica de programação - aula 6
Logica de programação. introdução[AULA-1]
Alg aula 03 - construcao algoritmos2 tp1
Programação em C
Descritiva Narrativa (Lógica de Programação)
Excel VBA: Aula 9

Semelhante a Programação Funcional usando C# e F# (20)

DOCX
PDF
Oo presentation básica
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
PPTX
A importância da programação funcional no dia a-dia
PDF
MSP Tech Days 2018 - Programação Funcional com F#
PPTX
DP-900-BR-01.pptx
PPTX
3.1 orientação objetos
PPTX
Transição - Orientação a objeto para Funcional
PDF
PPTX
Hands on guiado .Net Core
PPTX
Revisão de C# 4.0
PPTX
Introdução a C# 4.0 (Revisão)
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
PPTX
Introdução à programação funcional
PDF
Orientação a objetos da teoria a prática em java
PDF
Desenvolvimento em .Net - Estruturas Basicas
PPT
TDC2018SP | Trilha .Net - Programacao Funcional com C#
PPT
Programação Funcional usando C#
PPTX
Boas práticas técnica para um código limpo (Clean Code)
PDF
Caelum java-testes-jsf-web-services-design-patterns-fj22
Oo presentation básica
Caelum java-testes-jsf-web-services-design-patterns-fj22
A importância da programação funcional no dia a-dia
MSP Tech Days 2018 - Programação Funcional com F#
DP-900-BR-01.pptx
3.1 orientação objetos
Transição - Orientação a objeto para Funcional
Hands on guiado .Net Core
Revisão de C# 4.0
Introdução a C# 4.0 (Revisão)
Caelum java-testes-jsf-web-services-design-patterns-fj22
Introdução à programação funcional
Orientação a objetos da teoria a prática em java
Desenvolvimento em .Net - Estruturas Basicas
TDC2018SP | Trilha .Net - Programacao Funcional com C#
Programação Funcional usando C#
Boas práticas técnica para um código limpo (Clean Code)
Caelum java-testes-jsf-web-services-design-patterns-fj22
Anúncio

Mais de Gabriel Schade Cardoso (15)

PPTX
Usando Visão Computacional para Identificar Letras em Libras
PPT
Programação Funcional usando F#
PPT
Clean Architecture com .NET Core
PPTX
C# 8 e ML.NET
PPTX
Machine Learning: Classificação de Comentários com Azure ML & Python
PPTX
Desmistificando Machine Learning
PPT
Programação Funcional para Humanos
PPT
Arquitetura Limpa em .NET Core
PPT
Aplicações inteligentes com o Azure Cognitive Services
PPT
Abordagem Funcional para Gerenciamento de Erros em .NET
PPTX
Desmistificando machine learning
PPTX
Uma abordagem funcional para gerenciamento de erros
PPTX
DDD linguagem ubiqua + codigo expressivo
PPTX
TDC - Desenvolvendo com Kinect
PPTX
Desenvolvendo com Kinect
Usando Visão Computacional para Identificar Letras em Libras
Programação Funcional usando F#
Clean Architecture com .NET Core
C# 8 e ML.NET
Machine Learning: Classificação de Comentários com Azure ML & Python
Desmistificando Machine Learning
Programação Funcional para Humanos
Arquitetura Limpa em .NET Core
Aplicações inteligentes com o Azure Cognitive Services
Abordagem Funcional para Gerenciamento de Erros em .NET
Desmistificando machine learning
Uma abordagem funcional para gerenciamento de erros
DDD linguagem ubiqua + codigo expressivo
TDC - Desenvolvendo com Kinect
Desenvolvendo com Kinect
Anúncio

Último (9)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Utilizando code blockes por andre backes
PPTX
Tipos de servidor em redes de computador.pptx
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Eng. Software - pontos essenciais para o início
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Manejo integrado de pragas na cultura do algodão
Utilizando code blockes por andre backes
Tipos de servidor em redes de computador.pptx
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Eng. Software - pontos essenciais para o início
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Viasol Energia Solar -Soluções para geração e economia de energia
Proposta de Implementação de uma Rede de Computador Cabeada.pptx

Programação Funcional usando C# e F#