SlideShare uma empresa Scribd logo
1 de 18
Evandro Souza
F# e o Paradigma funcional
● É linguagem multi-paradigma (OO, imperativa) -> functional-first
● Soluciona problemas complexos com códigos simples / elegantes
● Encoraja a imutabilidade do código
● É compativel com bibliotecas .NET
● É multiplataforma
Por que F#?
Conceitos fundamentais
● Functions != Classes, objects, methods.
● Functions são cidadãos de primeira classe.
Functions
bike->moto
Tunel da transformação
Functions -> inputs e outputs
let add x = (fun y -> x + y) Int->(int->int)
Output function
int->intint
let useFn f = f() + 1 Int->(int->int)
Input function
int->int int
Int->int
parameter functionint->int
int int
let tranfInt f x= (f x) + 1
Compositions
bike->carro
Function C
bike->moto moto->carro
Function A Function B
● Types != Classes
● São imutáveis
● Não possuem valor “null”
Types
let inteiro = 1 //val inteiro : int
type Cliente = {Codigo : int;
RazaoSocial : string}
let cliente = {Codigo = 1;
RazaoSocial = "Gambiarra Ltda"} //val cliente : Cliente
let func x = x+1
let func1 = func //val func1 : (int -> int)
Record type
Exceto usando operador mutable
Types Compositions
Conjunto de pessoas Conjunto de datas
João, 12 Janeiro
Maria, 15 Dezembro
José, 17 Junho
Product Type
type pessoa = {Nome:string; Sobrenome:string}
type data = {Dia:int; Mes:int; Ano:int}
type aniversario = pessoa * data
let pessoa1 = { Nome = "João"; Sobrenome="Silva"}
let dia11Janeiro = {Dia = 11; Mes=1; Ano=1989}
let aniversario = (pessoa1, dia11Janeiro)
Tuple type
Types Compositions
Dinheiro
Cartão de crédito
Cheque
type pagamento =
| Dinheiro of double
| Cheque of double
| CartaoCredito of string * string * double
let tipoCheque = CartaoCredito("EVANDRO F SOUZA",
"454545454",
100.00)
Sum Type
● Similar ao swith do C#
Match Expressions
let tipoCliente x=
match x with
| 1 -> "Cliente normal"
| 2 -> "Cliente vip"
| _ -> "Não definido"
public string TipoCliente(int x)
{
switch (x)
{
case 1: return "Cliente
normal";
case 2: return "Cliente vip";
default: return "Não definido";
}
}
Não é opcional
Operador Pipe forward
● Maneira elegante funcional de passar parâmetros para uma função
let square x = x * x
let toStr x = x.ToString()
let rev (x : string) = new string (Array.rev (x.ToCharArray()))
let result = rev (toStr (square 9))
9 81 “81” “18"
let result = 9 |> square |> toStr |> rev
Onde posso utilizar?
http://fsharp.org
https://fsharpforfunandprofit.com/posts/low-risk-ways-to-use-fsharp-at-work/
Vamos codar
Somar a raiz quadrada de 1 até N.
Necessidade
3 1, 2, 3 1, 4, 9 14
public static class SumOfSquaresHelper
{
public static int Square(int i)
{
return i * i;
}
public static int SumOfSquares(int n)
{
var sum = 0;
for (var i = 1; i <= n; i++)
{
sum += Square(i);
}
return sum;
}
}
let square x = x * x
let sumOfSquares n =
[1..n] |> List.map square |> List.sum
sumOfSquares 3
✓ Menos código (16 linhas -> 4 linhas)
✓ Sem declaração de tipos
✓ Desenvolvimento interativo
public static class SumOfSquaresHelper
{
public static int SumOfSquares(int n)
{
return Enumerable.Range(1, n)
.Select(i => i * i)
.Sum();
}
}
let square x = x * x
let sumOfSquares n =
[1..n] |> List.map square |> List.sum
sumOfSquares 3
● http://fsharp.org/guides/web/
● https://fsharpforfunandprofit.com
● https://fsharpforfunandprofit.com/posts/low-risk-ways-to-use-fsharp-at-work/
● http://www.tryfsharp.org/
Referências
Obrigado!
evandroferreira
sevandroferreira
s
evandroferreira
s

Mais conteúdo relacionado

Mais procurados

Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelasRicardo Bolanho
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Ismar Silveira
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Karoline Tavares
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...Manuel Menezes de Sequeira
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesElaine Cecília Gatto
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricksTales Andrade
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_javaMarcos Souza
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05profwtelles
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java Manuel Menezes de Sequeira
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem cRafael_Lima87
 
Processing: programação para artes visuais
Processing: programação para artes visuaisProcessing: programação para artes visuais
Processing: programação para artes visuaisMarlus Araujo
 

Mais procurados (20)

Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
14 algoritmos de classificacao de tabelas
14   algoritmos de classificacao de tabelas14   algoritmos de classificacao de tabelas
14 algoritmos de classificacao de tabelas
 
Aula17
Aula17Aula17
Aula17
 
Ponteiros de Função
Ponteiros de FunçãoPonteiros de Função
Ponteiros de Função
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
3. Funções/repórteres e listas em Snap!; Utilização de variáveis – Fundamento...
 
Java
JavaJava
Java
 
Linguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e FunçõesLinguagem C - Vetores, Matrizes e Funções
Linguagem C - Vetores, Matrizes e Funções
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Resumo tipo primitivo_java
Resumo tipo primitivo_javaResumo tipo primitivo_java
Resumo tipo primitivo_java
 
Linguagem c wellington telles - aula 05
Linguagem c   wellington telles - aula 05Linguagem c   wellington telles - aula 05
Linguagem c wellington telles - aula 05
 
Semana 3: Introdução à linguagem de programação Java
Semana  3: Introdução à linguagem de programação Java Semana  3: Introdução à linguagem de programação Java
Semana 3: Introdução à linguagem de programação Java
 
Funções
FunçõesFunções
Funções
 
Programação em C
Programação em CProgramação em C
Programação em C
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
JAVA - Introdução
JAVA - IntroduçãoJAVA - Introdução
JAVA - Introdução
 
Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3Programação Orientada por Objectos - Aula 3
Programação Orientada por Objectos - Aula 3
 
Processing: programação para artes visuais
Processing: programação para artes visuaisProcessing: programação para artes visuais
Processing: programação para artes visuais
 

Semelhante a F sharp e o paradigma funcional

Semelhante a F sharp e o paradigma funcional (20)

Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Henriquecristovao manual c-cpp
Henriquecristovao manual c-cppHenriquecristovao manual c-cpp
Henriquecristovao manual c-cpp
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Programação funcional tipada: uma introdução
Programação funcional tipada: uma introduçãoProgramação funcional tipada: uma introdução
Programação funcional tipada: uma introdução
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Aula python
Aula pythonAula python
Aula python
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Linguagem c parte 2
Linguagem c parte 2Linguagem c parte 2
Linguagem c parte 2
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Vhdl
VhdlVhdl
Vhdl
 
Aula01
Aula01Aula01
Aula01
 
Monadic Design
Monadic DesignMonadic Design
Monadic Design
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
 

Último

Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3filiperigueira1
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptxVagner Soares da Costa
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfMarcos Boaventura
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptxVagner Soares da Costa
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfdanielemarques481
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxFlvioDadinhoNNhamizi
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMdiminutcasamentos
 

Último (7)

Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3Calculo vetorial - eletromagnetismo, calculo 3
Calculo vetorial - eletromagnetismo, calculo 3
 
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
10 - RELOGIO COMPARADOR - OPERAÇÃO E LEITURA.pptx
 
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdfTipos de Cargas - Conhecendo suas Características e Classificações.pdf
Tipos de Cargas - Conhecendo suas Características e Classificações.pdf
 
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
07 - MICRÔMETRO EXTERNO SISTEMA MÉTRICO.pptx
 
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdfPROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
PROJETO DE INSTALAÇÕES ELÉTRICAS – REVIT MEP -.pdf
 
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docxTRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
TRABALHO INSTALACAO ELETRICA EM EDIFICIO FINAL.docx
 
Apresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPMApresentação Manutenção Total Produtiva - TPM
Apresentação Manutenção Total Produtiva - TPM
 

F sharp e o paradigma funcional

  • 1. Evandro Souza F# e o Paradigma funcional
  • 2. ● É linguagem multi-paradigma (OO, imperativa) -> functional-first ● Soluciona problemas complexos com códigos simples / elegantes ● Encoraja a imutabilidade do código ● É compativel com bibliotecas .NET ● É multiplataforma Por que F#?
  • 4. ● Functions != Classes, objects, methods. ● Functions são cidadãos de primeira classe. Functions bike->moto Tunel da transformação
  • 5. Functions -> inputs e outputs let add x = (fun y -> x + y) Int->(int->int) Output function int->intint let useFn f = f() + 1 Int->(int->int) Input function int->int int Int->int parameter functionint->int int int let tranfInt f x= (f x) + 1
  • 7. ● Types != Classes ● São imutáveis ● Não possuem valor “null” Types let inteiro = 1 //val inteiro : int type Cliente = {Codigo : int; RazaoSocial : string} let cliente = {Codigo = 1; RazaoSocial = "Gambiarra Ltda"} //val cliente : Cliente let func x = x+1 let func1 = func //val func1 : (int -> int) Record type Exceto usando operador mutable
  • 8. Types Compositions Conjunto de pessoas Conjunto de datas João, 12 Janeiro Maria, 15 Dezembro José, 17 Junho Product Type type pessoa = {Nome:string; Sobrenome:string} type data = {Dia:int; Mes:int; Ano:int} type aniversario = pessoa * data let pessoa1 = { Nome = "João"; Sobrenome="Silva"} let dia11Janeiro = {Dia = 11; Mes=1; Ano=1989} let aniversario = (pessoa1, dia11Janeiro) Tuple type
  • 9. Types Compositions Dinheiro Cartão de crédito Cheque type pagamento = | Dinheiro of double | Cheque of double | CartaoCredito of string * string * double let tipoCheque = CartaoCredito("EVANDRO F SOUZA", "454545454", 100.00) Sum Type
  • 10. ● Similar ao swith do C# Match Expressions let tipoCliente x= match x with | 1 -> "Cliente normal" | 2 -> "Cliente vip" | _ -> "Não definido" public string TipoCliente(int x) { switch (x) { case 1: return "Cliente normal"; case 2: return "Cliente vip"; default: return "Não definido"; } } Não é opcional
  • 11. Operador Pipe forward ● Maneira elegante funcional de passar parâmetros para uma função let square x = x * x let toStr x = x.ToString() let rev (x : string) = new string (Array.rev (x.ToCharArray())) let result = rev (toStr (square 9)) 9 81 “81” “18" let result = 9 |> square |> toStr |> rev
  • 14. Somar a raiz quadrada de 1 até N. Necessidade 3 1, 2, 3 1, 4, 9 14
  • 15. public static class SumOfSquaresHelper { public static int Square(int i) { return i * i; } public static int SumOfSquares(int n) { var sum = 0; for (var i = 1; i <= n; i++) { sum += Square(i); } return sum; } } let square x = x * x let sumOfSquares n = [1..n] |> List.map square |> List.sum sumOfSquares 3 ✓ Menos código (16 linhas -> 4 linhas) ✓ Sem declaração de tipos ✓ Desenvolvimento interativo
  • 16. public static class SumOfSquaresHelper { public static int SumOfSquares(int n) { return Enumerable.Range(1, n) .Select(i => i * i) .Sum(); } } let square x = x * x let sumOfSquares n = [1..n] |> List.map square |> List.sum sumOfSquares 3
  • 17. ● http://fsharp.org/guides/web/ ● https://fsharpforfunandprofit.com ● https://fsharpforfunandprofit.com/posts/low-risk-ways-to-use-fsharp-at-work/ ● http://www.tryfsharp.org/ Referências