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%.

Minicurso - funcional (CTI/2019)

  • 1.
    Introdução a programação funcionalcom Haskell Simpósio de Tecnologia da Informação 2019 - Colégio Técnico de Floriano (UFPI)
  • 2.
    HELLO WORlD! Sou PedroAugusto ✘ 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.
    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.
    4 Alguns slides forambaseados em outros slides existentes.
  • 5.
  • 6.
    6 ❖ Dados Imutáveis ❖Recussões ❖ Funções Conceitos Iniciais
  • 7.
    7 FP – Émuito velha?
  • 8.
  • 9.
  • 10.
    10 (Boston, 4 desetembro de 1927 — 23 de outubro de 2011) Criador da linguagem Lisp. John McCarthy
  • 11.
  • 12.
  • 13.
    13 “Life is tooshort for imperative programming” John Hughes
  • 14.
    14 Linguagens onde asvariáveis não mudam de valor durante a execução. São imutáveis.
  • 15.
  • 16.
    16 É difícil programarem linguagem funcional ?
  • 17.
  • 18.
    18 Funcional Imperativo LogicoO. Objetos Funções If, While, For Implicações Classes Calculo Lambda Objetos Recursão Metodos (...)
  • 19.
    19 POO vs Fucional Programaçãoorientada 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.
    20 ● Códigos sucintose concisos ○ Menor tempo de desenvolvimento ○ Manutenabilidade ● Códigos seguros ● Reusabilidade ● Facilidade de escrita, suporte a abstrações ● Confiabilidade, segurança Vantagens
  • 21.
  • 22.
    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.
    23 quicksort :: Orda => [a] -> [a] quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (< p) xs greater = filter (>= p) xs
  • 24.
    24 ● Caminho parase pensar de forma funcional é mais complexo para quem já programou em linguagens imperativas ● Muita Memória Desvantagens
  • 25.
  • 26.
    26 Tudo em C,Java, C++, .NET Sistemas Operacionais Web Browsers Jogos SmarthPhone
  • 27.
    27 As linguagens maispopulares do planeta Fonte: https://www.tiobe.com/tiobe-index/
  • 28.
  • 29.
    29 Programação Imperativa /OO Formalismo, Syntax, Detalhes, Steps
  • 30.
  • 31.
  • 32.
    32 Tem emprego naárea de programação funcional no Brasil?
  • 33.
  • 34.
  • 35.
    35 1. Pega ocafé 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.
  • 37.
    37 ● Tipos dedados ● Entrada e saida de dados ● Listas ● Tuplas ● Funções
  • 38.
    THANKS! Any questions? You canfind me at ✘ @pedroa.alcantara ✘ pedro.aarm@gmail.com 38
  • 39.
    39 Mini maratona deprogramação
  • 40.
    40 Regras ● Deverá serutilizado 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.
    41 1. Faça umprograma 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%.