SlideShare une entreprise Scribd logo
1  sur  33
Por que você precisa (re)aprender linguagens funcionais? Luiz Borba Maio-2010
[object Object],[object Object],[object Object],[object Object]
[object Object],(defun quicksort (lis)  (if (null lis) nil (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x)))) (append (quicksort (remove-if-not fn r)) (list x) (quicksort (remove-if fn r))))))
[object Object],qsort [] = []  qsort (x:xs) = qsort (filter (< x) xs)  ++ [x] ++      qsort (filter (>= x) xs)
[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
Mas, de repente...
[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object]
Que diabos tá acontecendo?
[object Object]
“ Software is getting slower faster than hardware becomes faster” (Nicklaus Wirth)
código existente será obsoleto
temos que escrever código paralelo
QUEM SABE FAZER?
usando conceitos funcionais é mais fácil
Funções de Alta Ordem ,[object Object]
Imutabilidade let price = 10
Sem efeitos colaterais
Pattern Matching let peek s =     match s with     | Cons(hd, tl) -> hd     | Nil -> failwith &quot;Empty stack&quot;
[object Object],class Ping(count: int, pong: Actor) extends Actor {  def act() {  var pingsLeft = count – 1 pong ! Ping  while (true) {  receive {  case Pong => if (pingsLeft % 1000 == 0) println(&quot;Ping: pong&quot;)  if (pingsLeft > 0) {  pong ! Ping  pingsLeft -= 1  } else { println(&quot;Ping: stop&quot;) pong ! Stop  exit()  }  }  }  }  }
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Então vou fazer todos os meus novos sistemas usando linguagens funcionais?
NÃO
Vamos usar linguagens que tenham um mix de paradigmas
Funcional, Imperativa e Orientada a Objetos
Scala, C#, F# e  Java (?)
Precisamos aprender linguagens funcionais para escrever o software do futuro.
Perguntas? [email_address]

Contenu connexe

Tendances

Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 
Introdução ao Objective-C
Introdução ao Objective-CIntrodução ao Objective-C
Introdução ao Objective-C
Gustavo Barbosa
 

Tendances (12)

JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Três anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitorTrês anos de Scala no NewsMonitor
Três anos de Scala no NewsMonitor
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Introdução ao JavaScript
Introdução ao JavaScriptIntrodução ao JavaScript
Introdução ao JavaScript
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Introdução ao Objective-C
Introdução ao Objective-CIntrodução ao Objective-C
Introdução ao Objective-C
 
Principais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorizaçãoPrincipais conceitos e técnicas em vetorização
Principais conceitos e técnicas em vetorização
 
Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013Vetorização e Otimização de Código - Intel Software Conference 2013
Vetorização e Otimização de Código - Intel Software Conference 2013
 
Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04Algoritmos e Estrutura de Dados - Aula 04
Algoritmos e Estrutura de Dados - Aula 04
 
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
 

En vedette

Route2 company introduction_25.07.11
Route2 company introduction_25.07.11Route2 company introduction_25.07.11
Route2 company introduction_25.07.11
Tim Barker
 
Livro estatística fácil antônio arnot crespo - ed saraiva
Livro estatística fácil   antônio arnot crespo - ed saraivaLivro estatística fácil   antônio arnot crespo - ed saraiva
Livro estatística fácil antônio arnot crespo - ed saraiva
Pablo Cotes
 
Morettin estatistica básica, probabilidade
Morettin   estatistica básica, probabilidadeMorettin   estatistica básica, probabilidade
Morettin estatistica básica, probabilidade
lalabbesteves
 

En vedette (20)

Organizando demandas de desenvolvimento com o microsoft team foundation server
Organizando demandas de desenvolvimento com o microsoft team foundation serverOrganizando demandas de desenvolvimento com o microsoft team foundation server
Organizando demandas de desenvolvimento com o microsoft team foundation server
 
Metodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos ÁgilMetodologia de Gerenciamento de Projetos Ágil
Metodologia de Gerenciamento de Projetos Ágil
 
Todas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saberTodas as coisas que todo programador não pode deixar de saber
Todas as coisas que todo programador não pode deixar de saber
 
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
Os paradoxos de Blub, Python, a décima lei de Greenspun e porque você deveria...
 
Dias do futuro presente da programação
Dias do futuro presente da programaçãoDias do futuro presente da programação
Dias do futuro presente da programação
 
Route2 company introduction_25.07.11
Route2 company introduction_25.07.11Route2 company introduction_25.07.11
Route2 company introduction_25.07.11
 
Coisas que levei um tempo para aprender
Coisas que levei um tempo para aprenderCoisas que levei um tempo para aprender
Coisas que levei um tempo para aprender
 
Voce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu CodigoVoce Tem Orgulho Do Seu Codigo
Voce Tem Orgulho Do Seu Codigo
 
Grafologia autoconhecimento e qualidade de vida
Grafologia autoconhecimento e qualidade de vidaGrafologia autoconhecimento e qualidade de vida
Grafologia autoconhecimento e qualidade de vida
 
Aplicando conceitos gerais de gerenciamento de projetos à engenharia de software
Aplicando conceitos gerais de gerenciamento de projetos à engenharia de softwareAplicando conceitos gerais de gerenciamento de projetos à engenharia de software
Aplicando conceitos gerais de gerenciamento de projetos à engenharia de software
 
Paradigmas de Programação
Paradigmas de ProgramaçãoParadigmas de Programação
Paradigmas de Programação
 
Como recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com BacktrackComo recuperar senhas WEP de redes wireless com Backtrack
Como recuperar senhas WEP de redes wireless com Backtrack
 
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x InterpretadasProcesso de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
Processo de Desenvolvimento de Software - Linguagens Compiladas x Interpretadas
 
Introdução à Engenharia de Software e UML
Introdução à Engenharia de Software e UMLIntrodução à Engenharia de Software e UML
Introdução à Engenharia de Software e UML
 
O guia-das-engenharias
O guia-das-engenhariasO guia-das-engenharias
O guia-das-engenharias
 
Introdução a engenharia walter antonio bazzo - 6ª edição
Introdução a engenharia   walter antonio bazzo - 6ª ediçãoIntrodução a engenharia   walter antonio bazzo - 6ª edição
Introdução a engenharia walter antonio bazzo - 6ª edição
 
Team Foundation Server
Team Foundation ServerTeam Foundation Server
Team Foundation Server
 
Livro estatística fácil antônio arnot crespo - ed saraiva
Livro estatística fácil   antônio arnot crespo - ed saraivaLivro estatística fácil   antônio arnot crespo - ed saraiva
Livro estatística fácil antônio arnot crespo - ed saraiva
 
Albert Einstein - Biografia, Obras, Curiosidades e Outros
Albert Einstein - Biografia, Obras, Curiosidades e Outros Albert Einstein - Biografia, Obras, Curiosidades e Outros
Albert Einstein - Biografia, Obras, Curiosidades e Outros
 
Morettin estatistica básica, probabilidade
Morettin   estatistica básica, probabilidadeMorettin   estatistica básica, probabilidade
Morettin estatistica básica, probabilidade
 

Similaire à Por que voce precisa (re)aprender linguagens funcionais

5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
Cândido Sales Gomes
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
Denis Costa
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
elliando dias
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Fernando Macedo
 

Similaire à Por que voce precisa (re)aprender linguagens funcionais (20)

Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHPProgramação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
5.II SACIC - 2010 - Desenvolvimento de Aplicações para TVDigital com NCLUA
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Functional Programming - Scala
Functional Programming - ScalaFunctional Programming - Scala
Functional Programming - Scala
 
pgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQLpgBouncer: um aglomerador de conexões para PostgreSQL
pgBouncer: um aglomerador de conexões para PostgreSQL
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturadoRaspador: Biblioteca em Python para extração de dados em texto semi-estruturado
Raspador: Biblioteca em Python para extração de dados em texto semi-estruturado
 
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...
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Princípios de Lógica de Programação
Princípios de Lógica de ProgramaçãoPrincípios de Lógica de Programação
Princípios de Lógica de Programação
 
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
Palestra: Computação Paralela na SECOMP 2013 (UNIFEI)
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 

Plus de Luiz Borba

Plus de Luiz Borba (18)

Novas ferramentas para analise de dados
Novas ferramentas para analise de dadosNovas ferramentas para analise de dados
Novas ferramentas para analise de dados
 
Desconstruindo EJB
Desconstruindo EJBDesconstruindo EJB
Desconstruindo EJB
 
Arquitetura pragmática
Arquitetura pragmáticaArquitetura pragmática
Arquitetura pragmática
 
It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)It's the end of design patterns as we know it (and i feel fine)
It's the end of design patterns as we know it (and i feel fine)
 
O triunfo dos nerds
O triunfo dos nerdsO triunfo dos nerds
O triunfo dos nerds
 
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vida
 
As coisas mudam
As coisas mudamAs coisas mudam
As coisas mudam
 
Merda Acontece
Merda AconteceMerda Acontece
Merda Acontece
 
Build 2013: O que vi por lá
Build 2013: O que vi por láBuild 2013: O que vi por lá
Build 2013: O que vi por lá
 
O futuro
O futuroO futuro
O futuro
 
Windows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouroWindows 8 a nova corrida do ouro
Windows 8 a nova corrida do ouro
 
Assuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vidaAssuntos aleatorios que podem mudar sua vida
Assuntos aleatorios que podem mudar sua vida
 
Startup tools
Startup toolsStartup tools
Startup tools
 
What i dont know about startups
What i dont know about startupsWhat i dont know about startups
What i dont know about startups
 
TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2TDD Direto das Trincheiras versao 2
TDD Direto das Trincheiras versao 2
 
TDD direto das trincheiras
TDD direto das trincheirasTDD direto das trincheiras
TDD direto das trincheiras
 
What killed RUP could kill Agile, too
What killed RUP could kill Agile, tooWhat killed RUP could kill Agile, too
What killed RUP could kill Agile, too
 
Métricas Em Fabricas De Software
Métricas Em Fabricas De SoftwareMétricas Em Fabricas De Software
Métricas Em Fabricas De Software
 

Dernier

Dernier (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 

Por que voce precisa (re)aprender linguagens funcionais