Programacao funcional

316 visualizações

Publicada em

Uma breve introdução a programação funcional e a algumas funções disponíveis no javascript pra a programação funcional

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
316
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
7
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

  • Um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis

  • Evolução brutal do hardware,
    os computadores agora tem multiprocessadores sofisticados,
    multi-core com terabytes de memória.
    A internet e a computação na nuvem
    - Necessidade de reutilização do códgio
  • Chat do facebook feito em Erlang
  • ECMAScript does not contain proper classes such as those in C++, Smalltalk, or Java, but rather, supports constructors which create objects. In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behavior. In ECMAScript, the state and methods are carried by objects, and structure, behavior and state are all inherited
  • A base do que hoje é a programação funcional foi criada paralelamente por Alan Turing e Alonzo Church, na década de 1930.

    A primeira linguagem de programação funcional criada para computadores foi LISP, desenvolvida por John McCarthy no Instituto de Tecnologia de Massachusetts (MIT) no fim dos anos 1950.

    Mas por um bom tempo este paradigma ficou fadado a ser apenas mais um tema acadêmico, por que ?

    De maneira rápida, sucinta e meio criacionista alguns fatos que sobrepujaram as linguagens funcionais.
    Computadores lentos e com pouca capacidade
    A linguagem Assembly deu origem a C, C para C++ e OO, e C++ e OO levando para Java – todas as imperativas e rápidas para os padrões de hardware da época
    O que levou o LISP e outras linguagens funcionais a serem deixadas de lado por sua lentidão.

    Cálculo labda !!!
  • 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.
    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.
    Funções não dependem do estado do sistema.
    Lambda: funções recebendo e retornando funções ou resultados das mesmas

  • Cálculo Lambda
  • Melhor modularidade
    Menos sujeito a efeitos colaterais
    Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade
  • Melhor modularidade
    Menos sujeito a efeitos colaterais
    Mais facilidade em resolver problemas de programação concorrente, devido a imutabilidade
    - Você possui um controle a nível matemático do seu código, uma vez q este implemente os princípios da funcional.
  • De acordo com a ECMA JS não é puramente orientado a objeto mas pode implementar OO por meio do padrão de protótipos.
    JS não contem classes como linguagens OO e nem tipagem forte
    No JS o estado e os métodos são transportados por objetos, estruturas, funções e o estado pode ser herdado ou passado a diante
  • Self invoking
    Clousures
    High order
    Pure
    Anonymus
    Method chains
    Recursion
    Lazy evaluation
  • 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.

    Call-backs podem ser considerados clousures.
  • 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.
  • Funções mais complexas onde pode haver uma ou mais funções internas.
    Podem ter escopo compartilhado.
    Recebem funções e retornam funções
  • 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 
  • O js desde sua versão 5 de 2011, ECMA-262 passou a implementar, map, reduce e filter como protótipos de array
    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.
    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) .

    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.

    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.
    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.
  • Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
  • Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  • Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce
  • - Zip
  • Recebe um valor para this e muitos argumentos
  • O applay também recebe um valor para this, mas como segundo parâmetro recebe um array.
  • - São super clousures que ajuam a organiza o processo de funções que criam outras funções
    - aqui chammos a bindSegundoArgumento para criar a nova função quando executamos quadradoDe, não estamos executando bindSegundoArgumento
    mas sim o resultado da função que passamos como parâmetro recebendo o valor passado para bindSegundoArgumento e o valor passado a quadradoDe como parâmetros
  • Em linhas gerais currying é uma função com argumentos simples que simplifica outra função mais complexa.
    Não afeta a função simplificada
  • Não esquecer:
    Teoria das categorias
    functors
    Monads
    Maybes
    Promises
    Lenses
    JQ is a Monad
    Herança de funções
    Mixins
    Padrão de estratégia
  • Programacao funcional

    1. 1. Programação funcional E um pouco de JavaScript
    2. 2. Deivis C. Wingert /DeivisWingert /Deivis
    3. 3. “Programação funcional, assim como a orientação a objetos, é uma forma de se pensar em como resolver problemas”
    4. 4. Hoje Nuvem Servidores distribuídos Programação concorrente
    5. 5. 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.
    6. 6. 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
    7. 7. 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.
    8. 8. Um pouco de história
    9. 9. O que faz uma linguagem ser funcional? Funções == objeto Imutabilidade Recursividade Lambda Independência de estado
    10. 10. 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.
    11. 11. 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.
    12. 12. 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.
    13. 13. Vantagens Modularidade Menos sujeito a efeitos colaterais Menor dependência entre módulos
    14. 14. Vantagens Reusabilidade Programação concorrente É matematicamente correto
    15. 15. O JavaScript é funcional ? • Em parte, pois sua construção permite a utilização tanto de programação funcional quanto de orientação a objetos.
    16. 16. Tipos de funções
    17. 17. 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.
    18. 18. Funções anônimas
    19. 19. 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
    20. 20. Funções auto invocáveis
    21. 21. 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.
    22. 22. Clousures
    23. 23. 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
    24. 24. Funções de primeira classe
    25. 25. 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
    26. 26. Funções de alta ordem
    27. 27. Funções puras
    28. 28. 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
    29. 29. Funções puras
    30. 30. Funções puras
    31. 31. Algumas ferramentas Callbacks Map Filter Reduce ForEach
    32. 32. 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
    33. 33. 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 ?
    34. 34. Callback
    35. 35. 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.
    36. 36. 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)
    37. 37. Map
    38. 38. 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.
    39. 39. Filter
    40. 40. 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.
    41. 41. 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
    42. 42. Reduce
    43. 43. 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.
    44. 44. ForEach • Funciona basicamente como um for
    45. 45. Menos importante, mas mesmo assim importantes • Concat • Reverse • Sort • Everey • Some • Flat
    46. 46. Manipulando funções
    47. 47. 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.
    48. 48. apply & call
    49. 49. apply & call
    50. 50. 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
    51. 51. Biding
    52. 52. Biding
    53. 53. Fábrica de funções • São clousures que ajudam a organiza o processo de funções que criam outras funções.
    54. 54. Fábrica de funções
    55. 55. 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
    56. 56. Partial application
    57. 57. Partial application
    58. 58. Partial application
    59. 59. 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
    60. 60. Currying
    61. 61. Exemplos /Deivis/Functional-Programming
    62. 62. Perguntas ? Obrigado

    ×