Paradigma
funcional até
leigos podem
entender
THE DEVELOPER’S CONFERENCE 2017
Leonardo Amarilho
Software Engineer | Agile Coach
leo.poa@gmail.com
github.com/leopoa
linkedin.com/in/leonardo-amarilho
Hello!
Observação:
Precisamos entender que o paradigma funcional é diferente!!!
Paradigma Funcional
O objetivo do funcional é imitar as
funções matemáticas na maior extensão
possível.
Benefícios:
- Sem side-effect
- Imutabilidade
- Lazy evaluation
Se f é a função
então, a função h é
essa é uma versão currying de f
Currying
Definição:
Se f é a função
então, a função h é
essa é uma versão currying de f
Currying
Definição:
Transforma uma função com muitos
argumentos, para que possa ser chamada como
uma cadeia de funções de argumento único
Depois de aplicar currying...
Imagine como um mecânico descreveria um carro...
Ele dividiria o carro em pedaços
menores, as peças. Explicaria que a
união dessas peças formam o carro.
Uma maneira bem detalhada de explicar
Visão do mecânico
Partial Application
Aplicação parcial envolve passar menos argumentos para uma função
que recebe múltiplos argumentos. Esse processo cria uma nova função
que recebe menos argumentos.
Você, que não é um engenheiro mecânico,
tivesse que explicar o que é um carro.
Dessa maneira seria difícil e complicado.
Agora imagine
Muito mais simples falar que o carro tem:
- Motor
- Volante
- 4 rodas
- Bateria
- etc...
Você não entrou em muitos detalhes,
mesmo assim explicou o que é um carro.
Partial Application
List Comprehension
É uma construção sintática, inspirada na compressão de conjuntos
É uma maneira concisa de manipular / construir uma lista
Porque usar?
- É otimizado
- É funcional
- Reduzir tamanho de código
12
Neste problema, você deverá exibir uma
lista de 1 a 20, um em cada linha, com as
seguintes exceções:
- Números divisíveis por 3 deve
aparecer como 'Fizz' ;
- Números divisíveis por 5 devem
aparecer como 'Buzz' ;
- Números divisíveis por 3 e 5 devem
aparecer como 'FizzBuzz' ao invés
do número'.
Puzzle FizzBuzz
Haskell
Ainda ficou com dúvidas?
Você é conservador
✗ Não gosta de aprender
✗ Nova tendência
✗ Esperar amadurecer
Orientação Objeto
int total = 0;
for elem in elems {
total += elem;
}
return total;
Funcional
(0...10).sum();
elems.sum();
Desenvolvedor bom é
pago por linha de código
Símbolos estranhos
->
::
Conceitos Obscuros
Currying
Monads
Símbolos óbvios
!=
++
Conceitos fáceis
Herança
Polimorfismo
Diferenças conceituais
Leonardo Amarilho
Software Engineer | Agile Coach
leo.poa@gmail.com
github.com/leopoa
linkedin.com/in/leonardo-amarilho
Thanks!

Paradigma funcional até leigos podem entender

  • 1.
  • 2.
    Leonardo Amarilho Software Engineer| Agile Coach leo.poa@gmail.com github.com/leopoa linkedin.com/in/leonardo-amarilho Hello!
  • 3.
    Observação: Precisamos entender queo paradigma funcional é diferente!!! Paradigma Funcional O objetivo do funcional é imitar as funções matemáticas na maior extensão possível. Benefícios: - Sem side-effect - Imutabilidade - Lazy evaluation
  • 4.
    Se f éa função então, a função h é essa é uma versão currying de f Currying Definição:
  • 5.
    Se f éa função então, a função h é essa é uma versão currying de f Currying Definição:
  • 6.
    Transforma uma funçãocom muitos argumentos, para que possa ser chamada como uma cadeia de funções de argumento único Depois de aplicar currying...
  • 7.
    Imagine como ummecânico descreveria um carro...
  • 8.
    Ele dividiria ocarro em pedaços menores, as peças. Explicaria que a união dessas peças formam o carro. Uma maneira bem detalhada de explicar Visão do mecânico
  • 9.
    Partial Application Aplicação parcialenvolve passar menos argumentos para uma função que recebe múltiplos argumentos. Esse processo cria uma nova função que recebe menos argumentos.
  • 10.
    Você, que nãoé um engenheiro mecânico, tivesse que explicar o que é um carro. Dessa maneira seria difícil e complicado. Agora imagine
  • 11.
    Muito mais simplesfalar que o carro tem: - Motor - Volante - 4 rodas - Bateria - etc... Você não entrou em muitos detalhes, mesmo assim explicou o que é um carro. Partial Application
  • 12.
    List Comprehension É umaconstrução sintática, inspirada na compressão de conjuntos É uma maneira concisa de manipular / construir uma lista Porque usar? - É otimizado - É funcional - Reduzir tamanho de código 12
  • 15.
    Neste problema, vocêdeverá exibir uma lista de 1 a 20, um em cada linha, com as seguintes exceções: - Números divisíveis por 3 deve aparecer como 'Fizz' ; - Números divisíveis por 5 devem aparecer como 'Buzz' ; - Números divisíveis por 3 e 5 devem aparecer como 'FizzBuzz' ao invés do número'. Puzzle FizzBuzz Haskell
  • 16.
    Ainda ficou comdúvidas?
  • 17.
    Você é conservador ✗Não gosta de aprender ✗ Nova tendência ✗ Esperar amadurecer
  • 18.
    Orientação Objeto int total= 0; for elem in elems { total += elem; } return total; Funcional (0...10).sum(); elems.sum(); Desenvolvedor bom é pago por linha de código
  • 19.
    Símbolos estranhos -> :: Conceitos Obscuros Currying Monads Símbolosóbvios != ++ Conceitos fáceis Herança Polimorfismo Diferenças conceituais
  • 20.
    Leonardo Amarilho Software Engineer| Agile Coach leo.poa@gmail.com github.com/leopoa linkedin.com/in/leonardo-amarilho Thanks!