haskell motivação

18
Programação Funcional em Haskell 2a Reunião — Motivação para Programação Funcional

Upload: crislanio-macedo

Post on 07-Aug-2015

90 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: Haskell motivação

Programação Funcional em Haskell2a Reunião — Motivação para Programação Funcional

Page 2: Haskell motivação

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;

Page 3: Haskell motivação

Motivação

Programação declarativa preocupa-se em especificar oproblema e a solução e não com a maneira com a qual estasolução será encontrada. Uma linguagem declarativapreocupa-se com o que deve ser computador e não como umvalor deve ser computador.

OBJETIVO do grupo: estudar Programação Funcionalcom a Linguagem Haskell.

Page 4: Haskell motivação

Programação Funcional

Lisp foi a primeira linguagem de programação funcional. Elafoi 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:

Page 5: Haskell motivação

Programação FuncionalLinguagem puramente funcionalAvaliação Lazy: argumentos são avaliados somente quandonecessá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)

Page 6: Haskell motivação

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

Page 7: Haskell motivação

Linguagens Funcionais

Page 8: Haskell motivação

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.

Page 9: Haskell motivação

Vantagens de Linguagens Funcionais

Reuso Haskell facilita e simplifica refatoração e reuso .

Page 10: Haskell motivação

Vantagens de Linguagens Funcionais

.

Realizam a mesma tarefa. Sentiu a diferença?

Page 11: Haskell motivação

Abstrações Poderosas

Page 12: Haskell motivação

Aumento de Produtividade

Page 13: Haskell motivação

Resumindo

Tamanho do Código

Tecnologia testada

Facilita o reuso

Diminuir o gap semântico

Abstrações Poderosas

Aumento da Produtividade

Page 14: Haskell motivação

Haskell no Mundo realGoogle MapReduce, Sawzall Ericsson AXE phone switch

Jane Street Capital Credit Suisse

Morgan Stanley Standard Chartered

Twitter Facebook

Yahoo Erlang

Scala Microsoft F#

Page 15: Haskell motivação

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 umalinguagem 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.

Page 16: Haskell motivação

???

Se linguagens funcionais são tão legais como é que eu nuncaouvi falar delas?

• Um paradigma de programação leva um longo tempo até seradotado. Ex: orientação a objetos surgiu nos anos 60.

• Linguagens funcionais são ensinadas na maioria dos cursosde computação da EUROPA e EUA, e em alguns cursos noBrasil

Page 17: Haskell motivação

???

• Linguagens funcionais são utilizadas em várias empresas eprojetos:• Autocad possui partes implementadas em LISP• Super Mario 64 usa LISP internamente• ERLANG: Linguagem funcional desenvolvida pela Ericson

Page 18: Haskell motivação

???

• Várias das coisas legais que encontramos nas linguagens deprogramaçã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)