SlideShare ist ein Scribd-Unternehmen logo
1 von 70
Downloaden Sie, um offline zu lesen
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 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
Quem somos nós
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?
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.
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.
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á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!
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.!
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 !
!
!
Contexto Histórico: LISP
Lisp - List Processing!
!
John McCarty - 1958!
!
Motivação processamento de Listas!
!
Lambda Calculus!
!
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 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;
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!
Functional Programming
!   Programs using only pure functions.
!   Functions that have no side effects.
!   Concept of Referential Transparency.
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.
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.
Functional Programming
Functional Programming
Functional Programming
!   Parallel Programming:
!   Execute programs faster on parallel hardware
!   Concurrent Programming:
!   Manage concurrent execution threads explicity
Functional Programming
!   Parallel Programming:
!   Execute programs faster on parallel hardware
!   Concurrent Programming:
!   Manage concurrent execution threads explicity
BOTH ARE TO HARD!!!
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: 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.
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(!)
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
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)!
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 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.
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.
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 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.
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 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”.
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!"
Imperative and
Functional Programming
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!”
Imperative and
Functional Programming
Conclusão
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
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

Weitere ähnliche Inhalte

Ähnlich wie Functional Programming - Scala

silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
AmlieOGalaxias
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
Marco Antônio
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
Sérgio Souza Costa
 

Ähnlich wie Functional Programming - Scala (20)

TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
1.1.paradigmas
1.1.paradigmas1.1.paradigmas
1.1.paradigmas
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Haskell motivaçãoaula2
Haskell motivaçãoaula2Haskell motivaçãoaula2
Haskell motivaçãoaula2
 
Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)Minicurso - funcional (CTI/2019)
Minicurso - funcional (CTI/2019)
 
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdfsilo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
silo.tips_paradigmas-e-linguagens-de-programaao-prof-josino-rodrigues-neto.pdf
 
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdfparadigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
paradigmasdlsksmmskskkekekekekedmmmdmdmmf.pdf
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de Programação
 
Linguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo LuaLinguagens de Script: Caso de Estudo Lua
Linguagens de Script: Caso de Estudo Lua
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Pho Aula 02
Pho Aula 02Pho Aula 02
Pho Aula 02
 
Seminário: Lisp
Seminário: LispSeminário: Lisp
Seminário: Lisp
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Programação Funcional - Luiz Stangarlin
Programação Funcional - Luiz StangarlinProgramação Funcional - Luiz Stangarlin
Programação Funcional - Luiz Stangarlin
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 

Mehr von José Renato Pequeno (6)

Arquitetura orientada a serviços (soa) e modelo de maturidade soa aberto (o...
Arquitetura orientada a serviços (soa)  e modelo de maturidade soa aberto (o...Arquitetura orientada a serviços (soa)  e modelo de maturidade soa aberto (o...
Arquitetura orientada a serviços (soa) e modelo de maturidade soa aberto (o...
 
Explorando os principais implementadores hadoop e o papel que eles exercem no...
Explorando os principais implementadores hadoop e o papel que eles exercem no...Explorando os principais implementadores hadoop e o papel que eles exercem no...
Explorando os principais implementadores hadoop e o papel que eles exercem no...
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
 
Apresentação Hadoop
Apresentação HadoopApresentação Hadoop
Apresentação Hadoop
 
Tdc 2012 - Apresentação da trilha iOS
Tdc 2012 - Apresentação da trilha iOSTdc 2012 - Apresentação da trilha iOS
Tdc 2012 - Apresentação da trilha iOS
 
Android Studio
Android StudioAndroid Studio
Android Studio
 

Functional Programming - Scala

  • 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
  • 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. 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.
  • 7. 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.
  • 8. Imperative ProgrammingArquitetura de John Von Neuman Norteou as linguagens de programação.
  • 9. Funções Contexto Histórico:René Descartes - “Penso logo existo!”! ! ! ! ! ! ! ! Discurso do Método! ! f ( x ) = x + 1! !
  • 10. 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!
  • 11. 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.!
  • 12. 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 ! ! !
  • 13. Contexto Histórico: LISP Lisp - List Processing! ! John McCarty - 1958! ! Motivação processamento de Listas! ! Lambda Calculus! !
  • 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)
  • 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;
  • 17. 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!
  • 18. Functional Programming !   Programs using only pure functions. !   Functions that have no side effects. !   Concept of Referential Transparency.
  • 19. 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.
  • 20. 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.
  • 23. Functional Programming !   Parallel Programming: !   Execute programs faster on parallel hardware !   Concurrent Programming: !   Manage concurrent execution threads explicity
  • 24. Functional Programming !   Parallel Programming: !   Execute programs faster on parallel hardware !   Concurrent Programming: !   Manage concurrent execution threads explicity BOTH ARE TO HARD!!!
  • 35. 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.
  • 36. 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(!)
  • 37. 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
  • 38. 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)!
  • 58. 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.
  • 59. 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.
  • 60. Imperative and Functional Programming !   Um anula o outro? !   Qual é a melhor? !   Por que Scala?
  • 61. 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.
  • 62. Imperative and Functional Programming !   Como propor o uso da linguagem funcional em sua empresa?
  • 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”.
  • 64. 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!"
  • 66. 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!”
  • 69. 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