programacao funcional

62
Programação funcional E um pouco de JavaScript

Upload: deivis-wingert

Post on 13-Apr-2017

345 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Programacao funcional

Programação funcional

E um pouco de JavaScript

Page 2: Programacao funcional

Deivis C. Wingert

/DeivisWingert

/Deivis

Page 3: Programacao funcional

“Programação funcional, assim como a orientação a objetos, é uma forma de se pensar em como resolver

problemas”

Page 4: Programacao funcional

Hoje

Nuvem

Servidores distribuídos

Programação concorrente

Page 5: Programacao funcional

E funcional funciona ?

• A programação funcional ficou por anos fechada ao meio acadêmico devido a complexidade

• Mas a cada dia isso vem mudando mais, as linguagens funcionais como Erlang, Clojure, Haskel, F# entre outras veem sendo cada vez mais utilizadas

• Pode ser utilizada em linguagens multi-paradigma como Scala e JavaScript.

Page 6: Programacao funcional

Por que funcional ?

• Por que isso agora ? Se já convivo tanto com a orientação a objetos no JavaScript

• O JavaScript não é nativamente orientado a objetos e nem puramente funcional

Page 7: Programacao funcional

Pedras no caminho

• A programação funcional vai parecer uma loucura no começo pois estamos em nossa maioria acostumados a trabalhar com a orientação a objetos.

• Para se criar bons sistemas utilizando JavaScript sobre o paradigma funcional é necessária uma bela curva de aprendizado.

Page 8: Programacao funcional

Um pouco de história

Page 9: Programacao funcional

O que faz uma linguagem ser funcional?

Funções == objetoImutabilidadeRecursividadeLambdaIndependência de estado

Page 10: Programacao funcional

O que faz uma linguagem ser funcional?

• Função é a menor parte de um programa

• Na programação funcional nos preocupamos em dizer a maquina o que queremos fazer e não como iremos fazer.

Page 11: Programacao funcional

O que faz uma linguagem ser funcional?

• A execução das expressões é controlada por condições e recursividade e não iterações diretas como ocorre nos paradigmas imperativos.

• Variáveis e estados imutáveis.

Page 12: Programacao funcional

Sobre o paradigma

• Funções não dependem do estado do sistema.

• Lambda: de maneira simples, é o conceito de funções recebendo e retornando funções ou resultados das mesmas, conceito oriundo do cálculo Lambda do matemático Alonzo Church.

Page 13: Programacao funcional

Vantagens

Modularidade

Menos sujeito a efeitos colaterais

Menor dependência entre módulos

Page 14: Programacao funcional

Vantagens

Reusabilidade

Programação concorrente

É matematicamente correto

Page 15: Programacao funcional

O JavaScript é funcional ?

• Em parte, pois sua construção permite a utilização tanto de programação funcional quanto de orientação a objetos.

Page 16: Programacao funcional

Tipos de funções

Page 17: Programacao funcional

Funções anônimas

• São simplesmente funções que não tem um nome definido.

• Sua utilização é bem comum quando temos apenas uma chamada a esta determinada função ou quando a retornamos como parâmetro.

Page 18: Programacao funcional

Funções anônimas

Page 19: Programacao funcional

Funções auto invocáveis

• São funções que ao serem criadas já executam

• Mantem as suas variáveis com acesso apenas interno, isso inclui funções internas.

• Para disponibilizar algum valor pode-se utilizar o return desta função

Page 20: Programacao funcional

Funções auto invocáveis

Page 21: Programacao funcional

Closures

- Funções que possuem funções filhas que tem acesso as variáveis do escopo da função pai

- Você pode salvar algum dado dentro de uma função que é apenas acessível à função de retorno , isto é, a função retornada mantém seu ambiente de execução.

- Estão presentes em qualquer linguagem funcional.

Page 22: Programacao funcional

Clousures

Page 23: Programacao funcional

Funções de primeira classe

- Funções mais simples que podem ser representadas apenas com números.

- São atribuídas a uma variável

- Não e não recebem parâmetros complexos

Page 24: Programacao funcional

Funções de primeira classe

Page 25: Programacao funcional

Funções de alta ordem

- Funções mais complexas onde pode haver uma ou mais funções internas.

- Podem ter escopo compartilhado.

- Recebem funções e retornam funções

Page 26: Programacao funcional

Funções de alta ordem

Page 27: Programacao funcional

Funções puras

Page 28: Programacao funcional

Funções puras

- Funções onde dado um ou mais parâmetros de entrada a será a mesma para toas as vezes que estes parâmetros forem recebidos.

- Não dependem de variáveis externas, recebem dados e retornam dados.

- Não causa nem um tipo de efeito colateral

Page 29: Programacao funcional

Funções puras

Page 30: Programacao funcional

Funções puras

Page 31: Programacao funcional

Algumas ferramentas

CallbacksMapFilter

ReduceForEach

Page 32: Programacao funcional

Algumas ferramentas

• O JavaScript desde sua versão 5.1 de 2011, ECMA-262 passou a implementar, map, filter, reduce e forEach como protótipos de array

Page 33: Programacao funcional

Callbacks

• São funções passadas como parâmetro, para que a função que recebeu o call-back a use

• Quem nunca usou uma chamada de Ajax da jQuery ?

Page 34: Programacao funcional

Callback

Page 35: Programacao funcional

Map- Itera um Array executando uma função de call-back

sobre cada item do Array, retornando uma lista nova, normalmente modificada.

- A função map() recebe dois parâmetros , onde primeiro parâmetro é uma função de call-back.

- E o segundo é opcional, é o valor a ser utilizado como o this no momento da execução da função callback.

Page 36: Programacao funcional

Map

- O segundo parâmetro é utilizado para especificar o valor para o escopo da função.

- O mais importante são os parâmetros passados para a função de call-back, o elemento do Array em si, o índice do Array, e todo o Array (contexto)

Page 37: Programacao funcional

Map

Page 38: Programacao funcional

Filter

- Os parâmetros da função filter são exatamente os mesmos da função .map().

- E como o nome sugere ela filtra alguma coisa em um array.

- O filtro é criado a partir da logica da função de call-back passada como parâmetro.

Page 39: Programacao funcional

Filter

Page 40: Programacao funcional

Reduce

- Itera um Array da mesma maneira que o map, mas retorna a soma dos resultados da função de call-back recebida.

- Assim como map, reduce recebe dois argumentos. A função de call-back e o argumento opcional para o this.

Page 41: Programacao funcional

Reduce

- O primeiro é novamente a função de callback, que será chamada para cada elemento no Array.

- O segundo parâmetro é o initialValue que será utilizado para somar ao próximo valor. Caso não seja informado o primeiro valor do array é o initialValue

Page 42: Programacao funcional

Reduce

Page 43: Programacao funcional

ForEach

• É uma versão não pura do .map(), que como este recebe uma função de call-back como parâmetro e para esta passa o item corrente, índice e uma referencia ao próprio array.

• Mas diferentemente do map, o forEach não tem um retorno.

Page 44: Programacao funcional

ForEach

• Funciona basicamente como um for

Page 45: Programacao funcional

Menos importante, mas mesmo assim importantes

• Concat

• Reverse

• Sort

• Everey

• Some

• Flat

Page 46: Programacao funcional

Manipulando funções

Page 47: Programacao funcional

apply & call

• Os métodos call e apply são muito semelhantes, ambos chamam uma função.

• Diferenciam-se pelos parâmetros recebidos

• Por padrão possuem uma variável interna chamada arguments que recebe os parâmetros passados além do this.

Page 48: Programacao funcional

apply & call

Page 49: Programacao funcional

apply & call

Page 50: Programacao funcional

Biding

• É uma função que como o call, recebe this como primeiro parâmetro e uma sequencia de parâmetros.

• A grande diferença é que o bind retorna uma nova função e não o resultado da chamada como call e apply

Page 51: Programacao funcional

Biding

Page 52: Programacao funcional

Biding

Page 53: Programacao funcional

Fábrica de funções

• São clousures que ajudam a organiza o processo de funções que criam outras funções.

Page 54: Programacao funcional

Fábrica de funções

Page 55: Programacao funcional

Partial application

• Partial application é o processo de vincular um ou mais valores a um ou mais parâmetros de uma função que retorna outra função que irá aceitar os valores que não foram vinculados ainda.

• Uma maneira bonita de criar funções que recebem parâmetros opcionais

Page 56: Programacao funcional

Partial application

Page 57: Programacao funcional

Partial application

Page 58: Programacao funcional

Partial application

Page 59: Programacao funcional

Currying

- Em linhas gerais currying é o processo de transformar uma função com muitos argumentos em uma ou mais funções menores e mais simples.

- Não afeta a função simplificada

Page 60: Programacao funcional

Currying

Page 61: Programacao funcional

Exemplos

/Deivis/Functional-Programming

Page 62: Programacao funcional

Perguntas ?

Obrigado