SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Programação Funcional
em Haskell
2a Reunião — Motivação para Programação Funcional
Conteúdo e objetivos
 Introdução à programação funcional usando Haskell
 Objetivos de aprendizagem
 Motivação sobre programação funcional;
 O que é programação funcional ;
 Vantagens das linguagens funcionais;
Motivação
 Programação declarativa preocupa-se em especificar o
problema e a solução e não com a maneira com a qual esta
solução será encontrada. Uma linguagem declarativa
preocupa-se com o que deve ser computador e não como um
valor deve ser computador.
 OBJETIVO do grupo: estudar Programação Funcional
com a Linguagem Haskell.
Programação Funcional
 Lisp foi a primeira linguagem de programação funcional. Ela
foi descrita por MacCarthy do MIT em 1960.
 Vamos estudar uma linguagem de programação funcional
moderna, chamada Haskell, que possui várias características
interessantes:
Programação Funcional
Linguagem puramente funcional
Avaliação Lazy: argumentos são avaliados somente quando
necessário. Possibilita o trabalho com estrutura de dados infinitas.
Não existe a noção de estado
Não existe comando de atribuicão
Não existem variáveis!
Cada função é definida como a composição e aplicação de outras
funções (ou da própria)
Linguagens Funcionais
 Funções são os elementos principais neste tipo de linguagem.
 Funções podem receber funções como argumentos e uma função
pode devolver como resultado outra função.
 Estruturas de dados podem conter funções como elementos
Linguagens Funcionais
Vantagens de Linguagens
Funcionais
Código menor,
mais claro e
mais fácil de manter.
Andy Adams-Moran
(engenheiro de
software da Galois)
reduziu de
200.000 ->20.000
usando Haskell.
Vantagens de Linguagens
Funcionais
Reuso
Haskell facilita e simplifica refatoração e reuso .
Vantagens de Linguagens
Funcionais
.
Realizam a mesma tarefa.
Sentiu a diferença?
Abstrações Poderosas
Aumento de Produtividade
Resumindo
Tamanho do Código
Tecnologia testada
Facilita o reuso
Diminuir o gap semântico
Abstrações Poderosas
Aumento da Produtividade
Haskell no Mundo real
Google MapReduce, Sawzall
Ericsson AXE phone switch
Jane Street Capital
Credit Suisse
Morgan Stanley
Standard Chartered
Twitter
Facebook
Yahoo
Erlang
Scala
Microsoft F#
Vantagens de Linguagens
Funcionais
 Programas são pequenos e com alto poder de expressão.
 Suporta componentes reusáveis de software.
 Permite prototipação rápida.
 Permite verificação formal de programas. As funções em uma
linguagem funcional são funções matemáticas puras, não existe
atribuição. Uma função que recebe os mesmos argumentos sempre
devolve o mesmo resultado.
???
Se linguagens funcionais são tão legais como é que eu nunca
ouvi falar delas?
• Um paradigma de programação leva um longo tempo até ser
adotado. Ex: orientação a objetos surgiu nos anos 60.
• Linguagens funcionais são ensinadas na maioria dos cursos
de computação da EUROPA e EUA, e em alguns cursos no
Brasil
???
• Linguagens funcionais são utilizadas em várias empresas e
projetos:
• Autocad possui partes implementadas em LISP
• Super Mario 64 usa LISP internamente
• ERLANG: Linguagem funcional desenvolvida pela Ericson
???
• Várias das coisas legais que encontramos nas linguagens de
programação modernas surgiram nas linguagens funcionais.
Ex:
• Funções Anônimas (Phyton, PhP)
• Garbage Collection (Java, C#, Python, Perl, Ruby, Javascript)
• Generics (Java, C#)
• List comprehensions (C#, Python, Perl 6, Javascript)
• Type classes (C++ “concepts”)
• Higher-order functions (Java, C#, Python, Perl, Ruby, Javascript)
• Programação genérica, polimorfismo de tipo (Java 1.5)

Mais conteúdo relacionado

Mais procurados

Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoElaine Cecília Gatto
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programaçãoessa
 
Programação 1
Programação 1Programação 1
Programação 1essa
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação Marcos Gregorio
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Adriano Teixeira de Souza
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de ProgramaçãoBeDMK
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programaçãoAlbertoVach
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasNatanael Simões
 
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoFabio Spanhol
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Ismar Silveira
 
Dojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoDojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoGustavo Barbosa
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalGustavo Coutinho
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativoTony Alexander Hild
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoSidney Roberto
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09essa
 

Mais procurados (19)

Algoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de ProgramaçãoAlgoritmos - Paradigmas de Programação
Algoritmos - Paradigmas de Programação
 
01 aula1 habib
01 aula1 habib01 aula1 habib
01 aula1 habib
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Programação 1
Programação 1Programação 1
Programação 1
 
Linguagem de programação
Linguagem de programação Linguagem de programação
Linguagem de programação
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Linguagens de Programação
Linguagens de ProgramaçãoLinguagens de Programação
Linguagens de Programação
 
Linguágens de programação
Linguágens de programaçãoLinguágens de programação
Linguágens de programação
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x DeclarativasProcesso de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
Processo de Desenvolvimento de Software - Linguagens Imperativas x Declarativas
 
Paradigmas de Linguagens de Programação
Paradigmas de Linguagens de ProgramaçãoParadigmas de Linguagens de Programação
Paradigmas de Linguagens de Programação
 
Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1Paradigmas de Linguagens de Programacao - Aula #1
Paradigmas de Linguagens de Programacao - Aula #1
 
Dojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - IntroduçãoDojo swift - Aula 1 - Introdução
Dojo swift - Aula 1 - Introdução
 
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e FuncionalParadigmas de Programação - Imperativo, Orientado a Objetos e Funcional
Paradigmas de Programação - Imperativo, Orientado a Objetos e Funcional
 
Introdução ao paradigma imperativo
Introdução ao paradigma imperativoIntrodução ao paradigma imperativo
Introdução ao paradigma imperativo
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Conceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de ProgramaçãoConceitos Iniciais de Linguagens de Programação
Conceitos Iniciais de Linguagens de Programação
 
Linguagens de programação 03-12-09
Linguagens de programação   03-12-09Linguagens de programação   03-12-09
Linguagens de programação 03-12-09
 

Semelhante a Haskell motivação

Seminario haskell
Seminario haskellSeminario haskell
Seminario haskellRenzo Petri
 
Paradigmas da programacao apostila
Paradigmas da programacao apostilaParadigmas da programacao apostila
Paradigmas da programacao apostilaNathiele Lacerda
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Programação funcional com_haskell
Programação funcional com_haskellProgramação funcional com_haskell
Programação funcional com_haskellFelipe de Morais
 
Apresentação final
Apresentação finalApresentação final
Apresentação finalvalmon
 
Atps paradigmas linguagem programacao
Atps paradigmas linguagem programacaoAtps paradigmas linguagem programacao
Atps paradigmas linguagem programacaopablogranola
 
Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Nicolau Werneck
 
Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01Romário santos
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaGabriel Schade Cardoso
 
9 paradigma funcional usando haskell
9 paradigma funcional usando haskell9 paradigma funcional usando haskell
9 paradigma funcional usando haskellPéricles Miranda
 

Semelhante a Haskell motivação (20)

Seminario haskell
Seminario haskellSeminario haskell
Seminario haskell
 
Paradigmas da programacao apostila
Paradigmas da programacao apostilaParadigmas da programacao apostila
Paradigmas da programacao apostila
 
Isc aula 7
Isc   aula 7Isc   aula 7
Isc aula 7
 
Haskell
HaskellHaskell
Haskell
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Programação funcional com_haskell
Programação funcional com_haskellProgramação funcional com_haskell
Programação funcional com_haskell
 
Apresentação final
Apresentação finalApresentação final
Apresentação final
 
Linguagem da programação
Linguagem da programaçãoLinguagem da programação
Linguagem da programação
 
Atps paradigmas linguagem programacao
Atps paradigmas linguagem programacaoAtps paradigmas linguagem programacao
Atps paradigmas linguagem programacao
 
Cap02
Cap02Cap02
Cap02
 
Cap02
Cap02Cap02
Cap02
 
Cap02
Cap02Cap02
Cap02
 
Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]Introdução a Scala [GeekieTalk]
Introdução a Scala [GeekieTalk]
 
Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01Linguagensdeprogramao 100611235520-phpapp01
Linguagensdeprogramao 100611235520-phpapp01
 
A importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-diaA importância da programação funcional no dia a-dia
A importância da programação funcional no dia a-dia
 
Scala why
Scala whyScala why
Scala why
 
9 paradigma funcional usando haskell
9 paradigma funcional usando haskell9 paradigma funcional usando haskell
9 paradigma funcional usando haskell
 
Seminário: Lisp
Seminário: LispSeminário: Lisp
Seminário: Lisp
 
Linguagens de programação
Linguagens de programaçãoLinguagens de programação
Linguagens de programação
 
Poo frank
Poo frankPoo frank
Poo frank
 

Mais de CRISLANIO MACEDO

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record LinkageCRISLANIO MACEDO
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019CRISLANIO MACEDO
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithmCRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...CRISLANIO MACEDO
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...CRISLANIO MACEDO
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationCRISLANIO MACEDO
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogosCRISLANIO MACEDO
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-endsCRISLANIO MACEDO
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federalCRISLANIO MACEDO
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...CRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoCRISLANIO MACEDO
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseCRISLANIO MACEDO
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosCRISLANIO MACEDO
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarCRISLANIO MACEDO
 

Mais de CRISLANIO MACEDO (20)

Record Deduplication and Record Linkage
Record Deduplication and  Record LinkageRecord Deduplication and  Record Linkage
Record Deduplication and Record Linkage
 
Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019Pitch selo sebrae - Hackathon 2019
Pitch selo sebrae - Hackathon 2019
 
Pitch Medbloc
Pitch MedblocPitch Medbloc
Pitch Medbloc
 
Search based gravitational algorithm
Search based gravitational algorithmSearch based gravitational algorithm
Search based gravitational algorithm
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
Integración de métodos ágiles a una empresa de nivel 5 cmmi dev- un caso de e...
 
JGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast CommunicationJGROUPS- A Toolkit for Reliable Multicast Communication
JGROUPS- A Toolkit for Reliable Multicast Communication
 
Inteligência artificial algumas técnicas aplicadas em jogos
Inteligência artificial  algumas técnicas aplicadas em jogosInteligência artificial  algumas técnicas aplicadas em jogos
Inteligência artificial algumas técnicas aplicadas em jogos
 
Artigo ia traps, invariants, and dead-ends
Artigo ia   traps, invariants, and dead-endsArtigo ia   traps, invariants, and dead-ends
Artigo ia traps, invariants, and dead-ends
 
Análise dos dados abertos do governo federal
Análise dos dados abertos do governo federalAnálise dos dados abertos do governo federal
Análise dos dados abertos do governo federal
 
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
ANÁLISE ESTATÍSTICA DA RELAÇÃO ENTRE EVASÃO E AS RESPOSTAS DO QUESTIONÁRIO PA...
 
Sistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de AvaliaçãoSistema de denúncia de desperdício de água - Etapa de Avaliação
Sistema de denúncia de desperdício de água - Etapa de Avaliação
 
Sistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de SínteseSistema de denúncia de desperdício de água - Etapa de Síntese
Sistema de denúncia de desperdício de água - Etapa de Síntese
 
Resolução lista2
Resolução lista2Resolução lista2
Resolução lista2
 
Resoluçãohaskell2
Resoluçãohaskell2Resoluçãohaskell2
Resoluçãohaskell2
 
Haskell ufc quixadalista2
Haskell ufc quixadalista2Haskell ufc quixadalista2
Haskell ufc quixadalista2
 
Haskell ufc quixadalista1
Haskell ufc quixadalista1Haskell ufc quixadalista1
Haskell ufc quixadalista1
 
Haskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivosHaskell aula7 libs_intro_arquivos
Haskell aula7 libs_intro_arquivos
 
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesarHaskell aula5 f.ordem-sup_modulos-cifra_cesar
Haskell aula5 f.ordem-sup_modulos-cifra_cesar
 
Haskell aula3 listas
Haskell aula3 listasHaskell aula3 listas
Haskell aula3 listas
 

Haskell motivação

  • 1. Programação Funcional em Haskell 2a Reunião — Motivação para Programação Funcional
  • 2. Conteúdo e objetivos  Introdução à programação funcional usando Haskell  Objetivos de aprendizagem  Motivação sobre programação funcional;  O que é programação funcional ;  Vantagens das linguagens funcionais;
  • 3. Motivação  Programação declarativa preocupa-se em especificar o problema e a solução e não com a maneira com a qual esta solução será encontrada. Uma linguagem declarativa preocupa-se com o que deve ser computador e não como um valor deve ser computador.  OBJETIVO do grupo: estudar Programação Funcional com a Linguagem Haskell.
  • 4. Programação Funcional  Lisp foi a primeira linguagem de programação funcional. Ela foi descrita por MacCarthy do MIT em 1960.  Vamos estudar uma linguagem de programação funcional moderna, chamada Haskell, que possui várias características interessantes:
  • 5. Programação Funcional Linguagem puramente funcional Avaliação Lazy: argumentos são avaliados somente quando necessário. Possibilita o trabalho com estrutura de dados infinitas. Não existe a noção de estado Não existe comando de atribuicão Não existem variáveis! Cada função é definida como a composição e aplicação de outras funções (ou da própria)
  • 6. Linguagens Funcionais  Funções são os elementos principais neste tipo de linguagem.  Funções podem receber funções como argumentos e uma função pode devolver como resultado outra função.  Estruturas de dados podem conter funções como elementos
  • 8. Vantagens de Linguagens Funcionais Código menor, mais claro e mais fácil de manter. Andy Adams-Moran (engenheiro de software da Galois) reduziu de 200.000 ->20.000 usando Haskell.
  • 9. Vantagens de Linguagens Funcionais Reuso Haskell facilita e simplifica refatoração e reuso .
  • 10. Vantagens de Linguagens Funcionais . Realizam a mesma tarefa. Sentiu a diferença?
  • 13. Resumindo Tamanho do Código Tecnologia testada Facilita o reuso Diminuir o gap semântico Abstrações Poderosas Aumento da Produtividade
  • 14. Haskell no Mundo real Google MapReduce, Sawzall Ericsson AXE phone switch Jane Street Capital Credit Suisse Morgan Stanley Standard Chartered Twitter Facebook Yahoo Erlang Scala Microsoft F#
  • 15. Vantagens de Linguagens Funcionais  Programas são pequenos e com alto poder de expressão.  Suporta componentes reusáveis de software.  Permite prototipação rápida.  Permite verificação formal de programas. As funções em uma linguagem funcional são funções matemáticas puras, não existe atribuição. Uma função que recebe os mesmos argumentos sempre devolve o mesmo resultado.
  • 16. ??? Se linguagens funcionais são tão legais como é que eu nunca ouvi falar delas? • Um paradigma de programação leva um longo tempo até ser adotado. Ex: orientação a objetos surgiu nos anos 60. • Linguagens funcionais são ensinadas na maioria dos cursos de computação da EUROPA e EUA, e em alguns cursos no Brasil
  • 17. ??? • Linguagens funcionais são utilizadas em várias empresas e projetos: • Autocad possui partes implementadas em LISP • Super Mario 64 usa LISP internamente • ERLANG: Linguagem funcional desenvolvida pela Ericson
  • 18. ??? • Várias das coisas legais que encontramos nas linguagens de programação modernas surgiram nas linguagens funcionais. Ex: • Funções Anônimas (Phyton, PhP) • Garbage Collection (Java, C#, Python, Perl, Ruby, Javascript) • Generics (Java, C#) • List comprehensions (C#, Python, Perl 6, Javascript) • Type classes (C++ “concepts”) • Higher-order functions (Java, C#, Python, Perl, Ruby, Javascript) • Programação genérica, polimorfismo de tipo (Java 1.5)