SlideShare ist ein Scribd-Unternehmen 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

Weitere ähnliche Inhalte

Ähnlich wie Programação Funcional usando C# e F#

Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
Gregorio Melo
 
Fascículo1java
Fascículo1javaFascículo1java
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
Frederico Maia Arantes
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
Jose Augusto Cintra
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
tdc-globalcode
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
Gabriel Schade Cardoso
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
José Volmei Dal Prá Junior
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
Professor José de Assis
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
GustavoBarrosLins1
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
alexmacedo
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
Giovanni Kenji Shiroma
 
Modulo02
Modulo02Modulo02
Modulo02
Lisandro Michel
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
Gabriel Schade Cardoso
 
Lógica de programação
Lógica de programaçãoLógica de programação
Lógica de programação
Evaldo Savio Araujo
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
Eduardo Jorge
 
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Renato Shirakashi
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
Giovanni Bassi
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
Camilo Porto ► Software Engineer
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
Marcos Castro
 
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
Magic Software Brasil
 

Ähnlich wie Programação Funcional usando C# e F# (20)

Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Fascículo1java
Fascículo1javaFascículo1java
Fascículo1java
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
Algoritmos e Lógica de Programação
Algoritmos e Lógica de ProgramaçãoAlgoritmos e Lógica de Programação
Algoritmos e Lógica de Programação
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
 
Programação Funcional usando C#
Programação Funcional usando C#Programação Funcional usando C#
Programação Funcional usando C#
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Modulo02
Modulo02Modulo02
Modulo02
 
C# 8 e ML.NET
C# 8 e ML.NETC# 8 e ML.NET
C# 8 e ML.NET
 
Lógica de programação
Lógica de programaçãoLógica de programação
Lógica de programação
 
Intro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserverIntro padroesprojetoadaptertemplateobserver
Intro padroesprojetoadaptertemplateobserver
 
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...Desenvolva rapidamente
utilizando o framework
Desenvolva rapidamente utiliz...
Desenvolva rapidamente utilizando o framework Desenvolva rapidamente utiliz...
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
Explorando a Integração com .NET com o Magic xpa – Magic Sem Segredos – S01E07
 

Mehr von Gabriel Schade Cardoso

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
Gabriel Schade Cardoso
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
Gabriel Schade Cardoso
 
Clean Architecture com .NET Core
Clean Architecture com .NET CoreClean Architecture com .NET Core
Clean Architecture com .NET Core
Gabriel Schade Cardoso
 
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
Gabriel Schade Cardoso
 
Desmistificando Machine Learning
Desmistificando Machine LearningDesmistificando Machine Learning
Desmistificando Machine Learning
Gabriel Schade Cardoso
 
Programação Funcional para Humanos
Programação Funcional para HumanosProgramação Funcional para Humanos
Programação Funcional para Humanos
Gabriel Schade Cardoso
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
Gabriel Schade Cardoso
 
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
Gabriel Schade Cardoso
 
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
Gabriel Schade Cardoso
 
Desmistificando machine learning
Desmistificando machine learningDesmistificando machine learning
Desmistificando machine learning
Gabriel Schade Cardoso
 
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
Gabriel Schade Cardoso
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
Gabriel Schade Cardoso
 
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
Gabriel Schade Cardoso
 
DDD linguagem ubiqua + codigo expressivo
DDD  linguagem ubiqua + codigo expressivoDDD  linguagem ubiqua + codigo expressivo
DDD linguagem ubiqua + codigo expressivo
Gabriel Schade Cardoso
 
TDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com KinectTDC - Desenvolvendo com Kinect
TDC - Desenvolvendo com Kinect
Gabriel Schade Cardoso
 
Desenvolvendo com Kinect
Desenvolvendo com KinectDesenvolvendo com Kinect
Desenvolvendo com Kinect
Gabriel Schade Cardoso
 

Mehr von 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
 
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 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
 
Introdução à programação funcional
Introdução à programação funcionalIntrodução à programação funcional
Introdução à programação funcional
 
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
 
DDD linguagem ubiqua + codigo expressivo
DDD  linguagem ubiqua + codigo expressivoDDD  linguagem ubiqua + codigo expressivo
DDD linguagem ubiqua + codigo expressivo
 
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
 

Kürzlich hochgeladen

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 

Kürzlich hochgeladen (6)

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 

Programação Funcional usando C# e F#