22
DevDay 2011 Programação Funcional

DevDay BH 2011 Programação Funcional

Embed Size (px)

DESCRIPTION

Palestra ministrada no evento DevDay BH 2011

Citation preview

Page 1: DevDay BH 2011 Programação Funcional

DevDay 2011

Programação Funcional

Page 2: DevDay BH 2011 Programação Funcional

Quem sou eu?

• Rodrigo Vidal– Twitter: @rodrigovidal– www.rodrigovidal.net

• Foco em Arquitetura de Software• Evangelista da Linguagem F#• Professional Scrum Developer• Microsoft Student Partner

Page 3: DevDay BH 2011 Programação Funcional

Meu slide não é azul parceiro... É PRETO

Page 4: DevDay BH 2011 Programação Funcional

Programação Funcional

• Antigo paradigma

• 52 anos

• Ignorado do mainstream corporativo

Page 5: DevDay BH 2011 Programação Funcional

Isso importa?

• Novos desafios

• Mudança de Mindset

• Sair da zona de conforto

• Muitas linguagens implementam

Page 6: DevDay BH 2011 Programação Funcional

Object vs Function

Page 7: DevDay BH 2011 Programação Funcional

Pense diferente...!

• “Uma linguagem que não muda sua visão sobre programação, não vale ser aprendida.”

(Alan Perlis)

Page 8: DevDay BH 2011 Programação Funcional

Lambda Calculus

• Foi desenvolvido por Alonzo Church in 1930, como uma forma de estudar funções e computabilidade.

Page 9: DevDay BH 2011 Programação Funcional

Funções: O Coração

Page 10: DevDay BH 2011 Programação Funcional

C# e ai?

• Generics

• Iterators

• Anonymous Methods

• Delegates

Page 11: DevDay BH 2011 Programação Funcional

Transparência Referencial

A função depende apenas dos valores de seus parametros.

–Modificam estado– Interage de maneira observável com a

função invocadora– Interage com o “mundo exterior”– Exemplo: Uma função sem valor de

retorno

Page 12: DevDay BH 2011 Programação Funcional

Efeito Colateral

Função Impura

Estados

Atribuição

Entrada Saída

Page 13: DevDay BH 2011 Programação Funcional

Imutabilidade

Page 14: DevDay BH 2011 Programação Funcional

Aplicação Parcial de Funções

Page 15: DevDay BH 2011 Programação Funcional

T1 -> T2 -> R

Page 16: DevDay BH 2011 Programação Funcional

Funções de Alta Ordem

Page 17: DevDay BH 2011 Programação Funcional

Recursão em Cauda

Page 18: DevDay BH 2011 Programação Funcional

Composição de Funções

f(x)

g(x)

Page 19: DevDay BH 2011 Programação Funcional

MapReduce

Page 20: DevDay BH 2011 Programação Funcional

Monads

Page 21: DevDay BH 2011 Programação Funcional

Estrutura de uma Monad

• Haskell

class Monad m where (>>=) :: m a -> (a -> m b) -> m bReturn :: a -> m a

Page 22: DevDay BH 2011 Programação Funcional

Obrigado!