programação funcional no dia a dia

42
Programação Funcional ƛ Hercules Lemke Merscher

Upload: hercules-lemke-merscher

Post on 13-Apr-2017

416 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Programação funcional no dia a dia

Programação Funcional

ƛHercules Lemke Merscher

Page 2: Programação funcional no dia a dia
Page 3: Programação funcional no dia a dia
Page 4: Programação funcional no dia a dia

“A language that doesn't affect the way you think about programming, is not worth knowing.” (Alan Perlis)

Page 5: Programação funcional no dia a dia

Programação imperativa

Page 6: Programação funcional no dia a dia

O diabo mora na variável global

Page 7: Programação funcional no dia a dia

Muitas variáveis globais

Page 8: Programação funcional no dia a dia

Muitas variáveis globais

Oi?

Page 9: Programação funcional no dia a dia

Programação funcional?

Page 10: Programação funcional no dia a dia

O que é?

● Um paradigma de programação;

● Com origem no cálculo lambda;

● Trata computações como avaliação de funções, ao invés de execução de procedimentos.

Page 11: Programação funcional no dia a dia

Populares

Page 12: Programação funcional no dia a dia

Conceitos principais● Funções de alta-ordem (high-order functions);

● Funções puras (pure functions);

● Transparência referencial (referential transparency);

● Recursividade (recursion) / Recursividade em cauda (tail recursion);

Page 13: Programação funcional no dia a dia

Conceitos principais● Dados separados dos comportamentos;

● Funções que se compõe para manipular os dados;

● Imutabilidade por padrão;

● Limita efeitos colaterais.

Page 14: Programação funcional no dia a dia

Podemos usar conceitos da programação funcional no dia a dia, mesmo em

linguagens não funcionais.

Page 15: Programação funcional no dia a dia

Função de alta-ordem ?

f(x)

Page 16: Programação funcional no dia a dia

Função de alta-ordemfunction soma(a, b) { return a + b;}function multiplica(a, b) { return a * b;}function calcula(operacao, a, b) { return operacao(a, b);}console.log(calcula(soma, 1, 2)); // 3console.log(calcula(multiplica, 1, 2)); // 2

Page 17: Programação funcional no dia a dia

Função de alta-ordemfunction exibeUsuario(usuario) { console.log(usuario.nome + ‘ - ’ usuario.email);}

function buscaUsuario() { $.get(‘http://dev-es.com.br/usuarios/1’, exibeUsuario);}

buscaUsuario();// Fulano de Tal - [email protected]

Page 18: Programação funcional no dia a dia

Função de alta-ordemfunction adiciona(a) { return function(b) { return a + b; };}

var adiciona5 = adiciona(5);

console.log(adiciona5(1)); // 6console.log(adiciona(3)(10)); // 13

Page 19: Programação funcional no dia a dia

Recursividade ?

Page 20: Programação funcional no dia a dia

Recursividadefunction somaInteiros(lista) { if (lista.length === 0) { return 0; } var ultimo = lista.pop(); return ultimo + somaInteiros(lista);}

console.log(somaInteiros([1,2,3,4,5])); // 15

Page 21: Programação funcional no dia a dia

Recursividade em caudafunction somaInteiros(lista) { (function somaInteirosInterno(inteiros, soma) { if (inteiros.length === 0) { return soma; } var ultimo = inteiros.pop(); var novaSoma = soma + ultimo; return somaInteirosInterno(inteiros, novaSoma); })(lista, 0); }

console.log(somaInteiros([1,2,3,4,5])); // 15

Page 22: Programação funcional no dia a dia

CUIDADO!!!Nem todo

compilador/interpretador é otimizado para utilizar

recursividade.

Page 23: Programação funcional no dia a dia

Imutabilidade

“Premature optimization is the root of all evil.” (Donald Knuth)

Page 24: Programação funcional no dia a dia

Imutabilidade

Mutable state is the root of almost all evil.

Page 25: Programação funcional no dia a dia

Imutabilidadevar inteiros = [1,2,3,4,5,6,7,8,9,10];

var inteirosMenores = inteiros.splice(0, 5);

var inteirosMaiores = inteiros.splice(5, 10);

console.log(inteiros); // [6,7,8,9,10]console.log(inteirosMenores); // [1,2,3,4,5]console.log(inteirosMaiores); // []

Page 26: Programação funcional no dia a dia
Page 27: Programação funcional no dia a dia

Imutabilidadevar inteiros = [1,2,3,4,5,6,7,8,9,10];

var inteirosMenores = inteiros.slice(0, 5);

var inteirosMaiores = inteiros.slice(5, 10);

console.log(inteiros); // [1,2,3,4,5,6,7,8,9,10]console.log(inteirosMenores); // [1,2,3,4,5]console.log(inteirosMaiores); // [6,7,8,9,10]

Page 28: Programação funcional no dia a dia
Page 29: Programação funcional no dia a dia

splice vs slice

Page 30: Programação funcional no dia a dia

splice é uma função impura

var inteiros = [1,2,3,4,5,6,7,8,9,10];

inteiros.splice(0, 5); // [1,2,3,4,5]console.log(inteiros); // [6,7,8,9,10]

inteiros.splice(0, 5); // [6,7,8,9,10]console.log(inteiros); // []

Page 31: Programação funcional no dia a dia

slice é uma função puravar inteiros = [1,2,3,4,5,6,7,8,9,10];

inteiros.slice(0, 5); // [1,2,3,4,5]console.log(inteiros); // [1,2,3,4,5,6,7,8,9,10]

inteiros.slice(0, 5); // [1,2,3,4,5]console.log(inteiros); // [1,2,3,4,5,6,7,8,9,10]

inteiros.slice(0, 3); // [1,2,3]console.log(inteiros); // [1,2,3,4,5,6,7,8,9,10]

Page 32: Programação funcional no dia a dia

Imutabilidade e funções puras nos levam a

transparência referencial.

Page 33: Programação funcional no dia a dia

O que mais?

Page 34: Programação funcional no dia a dia

Paralelismo

Page 35: Programação funcional no dia a dia

Concorrência

Page 36: Programação funcional no dia a dia

“Sometimes, the elegant implementation is just a function. Not a method. Not a class. Not a framework. Just a function.” (John Carmack)

Page 37: Programação funcional no dia a dia
Page 38: Programação funcional no dia a dia

Aprofundando

Page 39: Programação funcional no dia a dia

Aprofundando

● http://www.artima.com/pins1ed/● http://learnyouahaskell.com/● http://www.braveclojure.com/● https://drboolean.gitbooks.io/mostly-adequate-guide● https://en.wikipedia.org/wiki/Functional_programming● https://www.cs.kent.ac.uk/people/staff/dat/miranda/

whyfp90.pdf

Page 40: Programação funcional no dia a dia

MOOC

● https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0

● https://www.coursera.org/course/progfun● https://www.coursera.org/course/proglang

Page 41: Programação funcional no dia a dia

Perguntas?

Page 42: Programação funcional no dia a dia

Obrigado!herculesdev.com.br