Functional
Programming for
“Old” Object
Oriented Developers
Quem somos nós
!   Alan Vidotti Prando
!   Mestrando em Engenharia da Computação - IPT/USP.
!   8 anos de experiência com ...
Quem somos nós
Roteiro!   Paradigma Programação
Imperativa.
!   Contexto Histórico: Lambda
Calculus, LISP.
!   Conceitos de Programação
F...
Introdução
Não importa quão longa é a sua
experiência como programador (júnior,
pleno ou sênior), aprender programação
fun...
Introdução!   From primitive assembly languages
(which were at least a step up from
raw machine code) there grew a
plethor...
Imperative
ProgrammingArquitetura de John Von Neuman
Norteou as linguagens de programação.
Funções Contexto
Histórico:René Descartes - “Penso logo existo!”!
!
!
!
!
!
!
!
Discurso do Método!
!
f ( x ) = x + 1!
!
Contexto Histórico:
Lambda Calculus
Na lógica matemática e na ciência da computação, cálculo lambda,
também escrito como c...
Lambda & Bloco de
Código
Função Nomeada somaQuadrados(x,y) = x*x + y * y!
!
somaQuadrados(5,2) = 5*5 + 2*2 = 29!
!
Função ...
Lambda & Bloco de
Código
Calculando com Curryng !
!
( x ↦ ( y ↦ x*x + y*y) ) (5) !
!
= ( y ↦ 5*5 + y*y) (2)!
!
= 5*5 + 2*2...
Contexto Histórico: LISP
Lisp - List Processing!
!
John McCarty - 1958!
!
Motivação processamento de Listas!
!
Lambda Calc...
Functional Programming
Functional Programming
Em uma função matemática, os coeficientes não mudam.
(a*x + b) + (c*x + d) = (a+c)*x + (b+d)
Functional Programming
Em uma função matemática, os coeficientes não mudam.
(a*x + b) + (c*x + d) = (a+c)*x + (b+d)	

Já na...
Functional Programming
Em uma função matemática, os coeficientes não mudam.
(a*x + b) + (c*x + d) = (a+c)*x + (b+d)	

Já na...
Functional Programming
!   Programs using only pure functions.
!   Functions that have no side effects.
!   Concept of Ref...
Functional Programming
!   Programs using only pure functions.
!   Functions that have no side effects.
!   Concept of Ref...
Functional Programming
!   Programs using only pure functions.
!   Functions that have no side effects.
!   Concept of Ref...
Functional Programming
Functional Programming
Functional Programming
!   Parallel Programming:
!   Execute programs faster on parallel hardware
!   Concurrent Programmi...
Functional Programming
!   Parallel Programming:
!   Execute programs faster on parallel hardware
!   Concurrent Programmi...
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming
Functional Programming!   Existem duas abordagens da programação funcional: Restrita e Amplo.
!   Restrita: programar SEM:...
Functional Programming!   Linguagens restritas:
!   Pure Lisp, XSLT, Xpath, Xquery, FP
!   Haskell (sem I/O Mondas ou
Unsa...
Functional Programming!   1959 - LISP
!   1975-77 - ML, FP, Scheme
!   1978 - Smalltalk
!   1986 - Standard ML
!   1990 - ...
High-Order Functions
Funções que recebem funções como parâmetros!
!
def funcQ(x : Int) = x * x!
!
!
def exemploSoma(a: Int...
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
Tail Recursion
!   Se você tem uma função recursiva que chama a sí
mesma como última ação, você consegue reutilizar
o stac...
Pattern Matching
!   So pattern matching helps you decompose and navigate data
structures in a very convenient, compact sy...
Imperative and
Functional Programming
!   Um anula o
outro?
!   Qual é a melhor?
!   Por que Scala?
Imperative and
Functional Programming
!   Têndencia ou
realidade?!   First class functions have slowly been added to mains...
Imperative and
Functional Programming
!   Como propor o uso da linguagem funcional
em sua empresa?
Imperative and
Functional Programming
!   Como propor o uso da linguagem funcional
em sua empresa?
!   Tenho um problema q...
Imperative and
Functional Programming
!   Como propor o uso da linguagem funcional
em sua empresa?
!   Tenho um problema q...
Imperative and
Functional Programming
Imperative and
Functional Programming
!   Como propor o uso da linguagem funcional
em sua empresa?
!   Tenho um problema q...
Imperative and
Functional Programming
Conclusão
Perguntas e Contato
!   ALAN VIDOTTI PRANDO
!   Linkedin: http://www.linkedin.com/in/avprando
!   Twitter: @alanprando
!  ...
Referênciashttp://pt.wikipedia.org/wiki/Cálculo_lambda
http://www.inf.pucrs.br/~gustavo/disciplinas/pli/
material/paradigm...
Functional Programming - Scala
Próximos SlideShares
Carregando em…5
×

Functional Programming - Scala

445 visualizações

Publicada em

Functional Programming - Scala

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

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

Nenhuma nota no slide

Functional Programming - Scala

  1. 1. Functional Programming for “Old” Object Oriented Developers
  2. 2. Quem somos nós !   Alan Vidotti Prando !   Mestrando em Engenharia da Computação - IPT/USP. !   8 anos de experiência com JAVA, RUBY & SCALA. !   SCJP, SCWCD e SCBCD. !   Jose Renato Pequeno !   Graduado em Tecnologia em Informática - FASP (2005), !   Pós graduação em Gerenciamento de Projetos - FGV. !   MBA em arquitetura de soluções - FIAP . !   Trabalhou como professor ministrando aulas na Universidade Metodista de São Paulo, para os cursos de Análise e Desenvolvimento de Sistemas, Engenharia da Computação com Ênfase em
  3. 3. Quem somos nós
  4. 4. Roteiro!   Paradigma Programação Imperativa. !   Contexto Histórico: Lambda Calculus, LISP. !   Conceitos de Programação Funcional !   Por que Programação Funcional? !   Técnicas e implementações funcionais (em Scala): !   Elementos básicos: Lambda, Clousure & Bloco de códigos !   Higher-Order Functions !   Tail Recursion !   Currying !   Pattern Matching. !   Misturando paradigmas funcionais e imperativos: Quais são as vantagens? O que o Oderksy propôs ao criar o Scala? É possível de trazer isso para o nosso dia a dia?
  5. 5. Introdução Não importa quão longa é a sua experiência como programador (júnior, pleno ou sênior), aprender programação funcional é um desafio. Esteja preparado para ser um “junior” novamente. Livro: Functional Programming in Scala. Nós gostaríamos que você fizesse uma “pausa” e esqueça o que você sabe sobre programação. Olhem para os exemplos com a menta aberta. Curso: Functional Programming in Scala. Martin Odersky. COURSERA.
  6. 6. Introdução!   From primitive assembly languages (which were at least a step up from raw machine code) there grew a plethora of high-level programming languages, beginning with FORTRAN in the 1950s. The development of these languages grew so rapidly that by the 1980s they were best characterized by grouping them into families that reflected a common computation model or programming style. Debates over which language or family of languages is best will undoubtedly persist for as long as computers need programmers. !   Fonte: Conception, Evolution, and Application of Functional Programming Languages. PAUL HUDAK, Yale University. 1989.
  7. 7. Imperative ProgrammingArquitetura de John Von Neuman Norteou as linguagens de programação.
  8. 8. Funções Contexto Histórico:René Descartes - “Penso logo existo!”! ! ! ! ! ! ! ! Discurso do Método! ! f ( x ) = x + 1! !
  9. 9. Contexto Histórico: Lambda Calculus Na lógica matemática e na ciência da computação, cálculo lambda, também escrito como cálculo-λ é um sistema formal que estuda funções recursivas computáveis, no que se refere a teoria da computabilidade, e fenômenos relacionados, como variáveis ligadas e substituição. Sua principal característica são as entidades que podem ser utilizadas como argumentos e retornadas como valores de outras funções.! ! Alonzo Church - 1930!
  10. 10. Lambda & Bloco de Código Função Nomeada somaQuadrados(x,y) = x*x + y * y! ! somaQuadrados(5,2) = 5*5 + 2*2 = 29! ! Função Anônima (x,y) ↦ x*x + y*y! ! Qualquer função que recebe duas ou mais entradas, pode ser reelaborada em uma função que recebe uma única entrada e tem como saída uma outra função.! ! x ↦ ( y ↦ x*x + y*y)! ! Esta transformação é chamada de curryng.!
  11. 11. Lambda & Bloco de Código Calculando com Curryng ! ! ( x ↦ ( y ↦ x*x + y*y) ) (5) ! ! = ( y ↦ 5*5 + y*y) (2)! ! = 5*5 + 2*2 = 29 ! ! !
  12. 12. Contexto Histórico: LISP Lisp - List Processing! ! John McCarty - 1958! ! Motivação processamento de Listas! ! Lambda Calculus! !
  13. 13. Functional Programming
  14. 14. Functional Programming Em uma função matemática, os coeficientes não mudam. (a*x + b) + (c*x + d) = (a+c)*x + (b+d)
  15. 15. Functional Programming Em uma função matemática, os coeficientes não mudam. (a*x + b) + (c*x + d) = (a+c)*x + (b+d) Já na programação imperativa você pode fazer isso! E isso não é permitido pela lei da matematica! class Polynomial {double[] doefficient; } Polynomial p = ….; p.coefficient[0] = 42;
  16. 16. Functional Programming Em uma função matemática, os coeficientes não mudam. (a*x + b) + (c*x + d) = (a+c)*x + (b+d) Já na programação imperativa você pode fazer isso! E isso não é permitido pela lei da matematica! class Polynomial {double[] doefficient; } Polynomial p = ….; p.coefficient[0] = 42; Se você quiser implementar conceitos matemáticos de alto nível seguindo as teorias matematicas, você não poderá utilizar mutações!
  17. 17. Functional Programming !   Programs using only pure functions. !   Functions that have no side effects. !   Concept of Referential Transparency.
  18. 18. Functional Programming !   Programs using only pure functions. !   Functions that have no side effects. !   Concept of Referential Transparency. !   Evitar mutações. VARIÁVEIS IMUTÁVEIS! !   Ter uma maneira poderosa de abstrair e compor funções.
  19. 19. Functional Programming !   Programs using only pure functions. !   Functions that have no side effects. !   Concept of Referential Transparency. !   Programação Funcional: foco nas funções. !   Programação imperativa: foco no estado. !   Evitar mutações. VARIÁVEIS IMUTÁVEIS! !   Ter uma maneira poderosa de abstrair e compor funções.
  20. 20. Functional Programming
  21. 21. Functional Programming
  22. 22. Functional Programming !   Parallel Programming: !   Execute programs faster on parallel hardware !   Concurrent Programming: !   Manage concurrent execution threads explicity
  23. 23. Functional Programming !   Parallel Programming: !   Execute programs faster on parallel hardware !   Concurrent Programming: !   Manage concurrent execution threads explicity BOTH ARE TO HARD!!!
  24. 24. Functional Programming
  25. 25. Functional Programming
  26. 26. Functional Programming
  27. 27. Functional Programming
  28. 28. Functional Programming
  29. 29. Functional Programming
  30. 30. Functional Programming
  31. 31. Functional Programming
  32. 32. Functional Programming
  33. 33. Functional Programming
  34. 34. Functional Programming!   Existem duas abordagens da programação funcional: Restrita e Amplo. !   Restrita: programar SEM: atribuições (variáveis imutáveis), loops, if- then-else. !   Amplo: Foco na função. A linguagem permite construção de programas “elegantes” com foco em funções. !   Funções podem ser: !   declaradas em qualquer lugar. !   Passadas como parâmetro para outras funções, bem como retornar como resultado de uma função. !   Deve haver operadores padrões na linguagem para trabalhar com funções de maneira simples.
  35. 35. Functional Programming!   Linguagens restritas: !   Pure Lisp, XSLT, Xpath, Xquery, FP !   Haskell (sem I/O Mondas ou UnsafePerformIO) !   Linguagens amplas: !   Lisp, Scheme, Racket, Clojure !   SML, Ocaml, F# !   Haskell (full language) !   Scala !   Smalltalk, Ruby(!), Javascript(!)
  36. 36. Functional Programming!   1959 - LISP !   1975-77 - ML, FP, Scheme !   1978 - Smalltalk !   1986 - Standard ML !   1990 - Haskell, Erlang !   1999 - XSLT !   2000 - Ocaml !   2003 - Scala, Xquery !   2005 - F# !   Clojure
  37. 37. High-Order Functions Funções que recebem funções como parâmetros! ! def funcQ(x : Int) = x * x! ! ! def exemploSoma(a: Int, b: Int, f: Int => Int): Int =! if (a>b) 0 else f(a) + soma(a+1, b, f)! ! ! exemploSoma(1, 10, funcQ)!
  38. 38. Tail Recursion
  39. 39. Tail Recursion
  40. 40. Tail Recursion
  41. 41. Tail Recursion
  42. 42. Tail Recursion
  43. 43. Tail Recursion
  44. 44. Tail Recursion
  45. 45. Tail Recursion
  46. 46. Tail Recursion
  47. 47. Tail Recursion
  48. 48. Tail Recursion
  49. 49. Tail Recursion
  50. 50. Tail Recursion
  51. 51. Tail Recursion
  52. 52. Tail Recursion
  53. 53. Tail Recursion
  54. 54. Tail Recursion
  55. 55. Tail Recursion
  56. 56. Tail Recursion
  57. 57. Tail Recursion !   Se você tem uma função recursiva que chama a sí mesma como última ação, você consegue reutilizar o stack frame da execução dessa função. !   Isso se chama TAIL RECURSION. !   Isso aumenta a eficiência da execução, sendo idêntica a eficiência de um loop. !   Na definição, Tail Recursion poderia acontecer mesmo se a chamada ocorresse para outra função, não sendo necessário a função ser chamada por ela mesma.
  58. 58. Pattern Matching !   So pattern matching helps you decompose and navigate data structures in a very convenient, compact syntax, it enables the compiler to check the logic of your code, at least a little bit. !   The act of checking a perceived sequence of tokens for the presence of the constituents of some pattern.
  59. 59. Imperative and Functional Programming !   Um anula o outro? !   Qual é a melhor? !   Por que Scala?
  60. 60. Imperative and Functional Programming !   Têndencia ou realidade?!   First class functions have slowly been added to mainstream languages. In 1994, support for lambda, filter, map, and reduce was added to Python. !   First class functions were also introduced in PHP 5.3,  Visual Basic 9, C# 3.0, and C++11. !   In Java, anonymous classes can sometimes be used to simulate closures; however, anonymous classes are not always proper replacements to closures because they have more limited capabilities. !   Java 8 will support lambda expressions as a replacement for some anonymous classes.
  61. 61. Imperative and Functional Programming !   Como propor o uso da linguagem funcional em sua empresa?
  62. 62. Imperative and Functional Programming !   Como propor o uso da linguagem funcional em sua empresa? !   Tenho um problema que faz sentido usar PF ao invés de PI. “Preciso atender a 1 milhão de requisições simultâneas. Tenho um data center matador e meu software precisa trabalhar de maneira concorrente e paralela”.
  63. 63. Imperative and Functional Programming !   Como propor o uso da linguagem funcional em sua empresa? !   Tenho um problema que faz sentido usar PF ao invés de PI. “Preciso atender a 1 milhão de requisições simultâneas. Tenho um data center matador e meu software precisa trabalhar de maneira concorrente e paralela”. !   Jeito ERRADO: “Scala é uma linguagem nova e com conceitos legais! Híbrida, OO e funcional. O código fica bem menos verborrágico. Além de ser divertido passar e receber funções como parâmetro! Vamos utilizar!"
  64. 64. Imperative and Functional Programming
  65. 65. Imperative and Functional Programming !   Como propor o uso da linguagem funcional em sua empresa? !   Tenho um problema que faz sentido usar PF ao invés de PI. “Preciso atender a 1 milhão de requisições simultâneas. Tenho um data center matador e meu software precisa trabalhar de maneira concorrente e paralela”. !   Jeito CERTO: “Vamos atender mais usuários sem precisar gastar com infraestrutura. Nosso ambiente (JVM), já esta pronto para isso. O sistema vai processar mais vendas e consequentemente lucraremos mais!”
  66. 66. Imperative and Functional Programming
  67. 67. Conclusão
  68. 68. Perguntas e Contato !   ALAN VIDOTTI PRANDO !   Linkedin: http://www.linkedin.com/in/avprando !   Twitter: @alanprando !   E-mail: alan.prando@gmail.com !   JOSE RENATO PEQUENO !   Linkedin: br.linkedin.com/pub/jose-renato-pequeno/28/524/244/ !   Twitter: @javalittle !   E-mail: jrpequeno@hotmail.com
  69. 69. Referênciashttp://pt.wikipedia.org/wiki/Cálculo_lambda http://www.inf.pucrs.br/~gustavo/disciplinas/pli/ material/paradigmas-aula09.pdf http://pt.wikipedia.org/wiki/ Arquitetura_de_von_Neumann https://fit.faccat.br/~guto/artigos/ Artigo_Paradigmas_de_Programacao.pdf http://hudsoncosta.files.wordpress.com/2011/05/ programacao_funcional.pdf

×