tdc2017 | poa trilha programcao funcional - paradigma funcional até leigos podem entender
TRANSCRIPT
Paradigma funcional até leigos podem
entender
THE DEVELOPER’S CONFERENCE 2017
Leonardo AmarilhoSoftware Engineer | Agile Coach
github.com/leopoa
linkedin.com/in/leonardo-amarilho
Hello!
Observação:
Precisamos entender que o paradigma funcional é diferente!!!
Paradigma FuncionalO 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 ApplicationAplicaçã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
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 FizzBuzzHaskell
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
CurryingMonads
Símbolos óbvios
!=++
Conceitos fáceis
HerançaPolimorfismo
Diferenças conceituais
Leonardo AmarilhoSoftware Engineer | Agile Coach
github.com/leopoa
linkedin.com/in/leonardo-amarilho
Thanks!