Post on 26-May-2015
description
DevDay 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
Meu slide não é azul parceiro... É PRETO
Programação Funcional
• Antigo paradigma
• 52 anos
• Ignorado do mainstream corporativo
Isso importa?
• Novos desafios
• Mudança de Mindset
• Sair da zona de conforto
• Muitas linguagens implementam
Object vs Function
Pense diferente...!
• “Uma linguagem que não muda sua visão sobre programação, não vale ser aprendida.”
(Alan Perlis)
Lambda Calculus
• Foi desenvolvido por Alonzo Church in 1930, como uma forma de estudar funções e computabilidade.
Funções: O Coração
C# e ai?
• Generics
• Iterators
• Anonymous Methods
• Delegates
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
Efeito Colateral
Função Impura
Estados
Atribuição
Entrada Saída
Imutabilidade
Aplicação Parcial de Funções
T1 -> T2 -> R
Funções de Alta Ordem
Recursão em Cauda
Composição de Funções
f(x)
g(x)
MapReduce
Monads
Estrutura de uma Monad
• Haskell
class Monad m where (>>=) :: m a -> (a -> m b) -> m bReturn :: a -> m a
Obrigado!