SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Introdução a programação
funcional com Haskell
Simpósio de Tecnologia da Informação 2019 - Colégio Técnico de Floriano (UFPI)
HELLO WORlD!
Sou Pedro Augusto
✘ Acadêmico de Sistemas de informação
pela universidade Federal do Piauí.
✘ Membro do Núcleo de Pesquisas
Aplicadas em Sistemas Distribuídos
(PASID) - (UFPI)
✘ Realiza pesquisa sobre desempenho de
linguagens funcionais em ambientes
muito-cloud
2
pedro.aarm@gmail.com
@pedroa.alcantara
3
Programação do minicurso
● Conceito Iniciais
● Programação Funcional é difícil?
● POO vs Funcional
● Vantagens e Desvantagens de Usar funcional
● Mercado de Trabalho
● PARTE PRATICA: CONHECENDO A SINTAXE
● MARATONA!
4
Alguns slides foram baseados em outros slides existentes.
5
Programação funcional:
Conceitos iniciais e história
6
❖ Dados Imutáveis
❖ Recussões
❖ Funções
Conceitos Iniciais
7
FP – É muito velha?
8
LISP - 1958
9
10
(Boston, 4 de setembro de 1927 — 23 de outubro de 2011) Criador da linguagem
Lisp.
John McCarthy
11
Haskell - 1990
12
13
“Life is too short for imperative
programming”
John Hughes
14
Linguagens onde as variáveis não mudam de valor durante a
execução. São imutáveis.
15
16
É difícil programar em linguagem funcional ?
17
18
Funcional Imperativo Logico O. Objetos
Funções If, While, For Implicações Classes
Calculo Lambda Objetos
Recursão Metodos (...)
19
POO vs Fucional
Programação orientada a objetos é um estilo de
Programação que permite:
● Reuso de código (via classes)
● Eliminação de bugs (via encapsulamento,
ocultação de dados )
Programação funcional é um estilo
de programação que permite:
● Reuso de código
(composição de função)
● Eliminação de bug (via
imutabilidade (não existe
mudança de valores de
variáveis))
20
● Códigos sucintos e concisos
○ Menor tempo de desenvolvimento
○ Manutenabilidade
● Códigos seguros
● Reusabilidade
● Facilidade de escrita, suporte a abstrações
● Confiabilidade, segurança
Vantagens
21
Exemplo Quick-Sort (C vs Haskell)
22
void qsort(int a[], int lo, int hi) {
int h, l, p, t;
if (lo < hi) {
l = lo;
h = hi;
p = a[hi];
do {
while ((l < h) && (a[l] <= p))
l = l+1;
while ((h > l) && (a[h] >= p))
h = h-1;
if (l < h) {
t = a[l];
a[l] = a[h];
a[h] = t;
}} while (l < h);
a[hi] = a[l];
a[l] = p;
qsort( a, lo, l-1 );
qsort( a, l+1, hi );
} }
23
quicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort
greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
24
● Caminho para se pensar de forma funcional é mais complexo
para quem já programou em linguagens imperativas
● Muita Memória
Desvantagens
25
Entrega, Pratico, Mercado...
26
Tudo em C, Java, C++, .NET
Sistemas Operacionais Web Browsers Jogos
SmarthPhone
27
As linguagens mais populares do planeta
Fonte: https://www.tiobe.com/tiobe-index/
28
29
Programação Imperativa / OO
Formalismo, Syntax, Detalhes, Steps
30
Aprenda algo diferente!
31
Fonte: https://insights.stackoverflow.com/survey/2019
32
Tem emprego na área de
programação funcional no Brasil?
33
34
Haskell,
Haskell
Haskell, Clojure
Clojure
CLOJURE!
35
1. Pega o café
2. Coloca o café na xícara
3. Coloca água quente na xícara
4. Mexe o café com a água
5. retorna o café
Imperativa
Funcional
retorna mexe (água, coloca (café, xícara))
36
Conhecendo a Sintaxe Haskell
37
● Tipos de dados
● Entrada e saida de dados
● Listas
● Tuplas
● Funções
THANKS!
Any questions?
You can find me at
✘ @pedroa.alcantara
✘ pedro.aarm@gmail.com
38
39
Mini maratona de programação
40
Regras
● Deverá ser utilizado a linguagem de programação Haskell
● Duração: 1 Hora
● Ganhará quem resolver todas as questões em menor tempo ( Ou quem resolver mais questões em
até 17:45 )
● Divirta-se
41
1. Faça um programa que receba o nome de uma pessoa e depois imprima o nome recebido na tela
2. Faça um programa que receba 2 números e em seguida faça e mostre os resultados da soma,
multiplicação, divisão e subtração
3. Faça uma função para calcular a média entre 3 números
4. Faça uma função que calcule a área de um circulo
5. Defina uma função atualizaSaldo :: Float -> Float que receba como argumento o saldo de uma conta
e exiba como resultado o novo saldo após um reajuste de 10%.

Mais conteúdo relacionado

Semelhante a Introdução à programação funcional com Haskell

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming LibraryMario Guedes
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?Felipe Volpone
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonFabio Spanhol
 
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfAmlieOGalaxias
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem CVê Rodrigues
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaSérgio Souza Costa
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6William Colen
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvROficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvRCiro Matheus
 
Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Alan Prando
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 

Semelhante a Introdução à programação funcional com Haskell (20)

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Delphi Parallel Programming Library
Delphi Parallel Programming LibraryDelphi Parallel Programming Library
Delphi Parallel Programming Library
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Calourada2010
Calourada2010Calourada2010
Calourada2010
 
Python-Fenalivre-Imed
Python-Fenalivre-ImedPython-Fenalivre-Imed
Python-Fenalivre-Imed
 
Automação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com PythonAutomação de Aplicativos: Scripting com Python
Automação de Aplicativos: Scripting com Python
 
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6Processamento Automático da Língua Portuguesa - Campus Party Br 6
Processamento Automático da Língua Portuguesa - Campus Party Br 6
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Empreendendo com Python
Empreendendo com PythonEmpreendendo com Python
Empreendendo com Python
 
Oficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvROficina de Lógica de Programação - Uso do Scratch e do GvR
Oficina de Lógica de Programação - Uso do Scratch e do GvR
 
Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers Functional programming for Old Object Oriented Developers
Functional programming for Old Object Oriented Developers
 
Haskell
HaskellHaskell
Haskell
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 

Introdução à programação funcional com Haskell