SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
Why functional
programming
matters
Jean Carlo Machado
⇢ Title: Why functional programming matters
⇢ Author: Jhon Hughes, Glasgow
⇢ Year: 1990
Sobre
CompuFácil
⇢ php-src
⇢ git/git
⇢ torvald/linux
⇢ vim/vim
⇢ Doctrine
⇢ Zend Framework
⇢ phpunit
História
1936 Imperativo
⇢ Alan Turing
⇢ computação universal
⇢ Receita
⇢ assembly
⇢ Goto
⇢ side effects
1950 Estruturado
⇢ Agol
⇢ while, for, if
⇢ reuso
⇢ sem goto
Programação
Funcional
mudança de estado
Vantagens
⇢ Facilita a modularização
⇢ Concorrência nativa
⇢ Desacelera o apodrecimento
Modularização
⇢ Mais que módulos
⇢ Decompor os problemas em partes menores
⇢ Re-compor com avaliação tardia e funções de alta orem
Apodrecimento
⇢ Impossível adicionar efeitos sem quebrar as interfaces
⇢ Quão maior a interface mais feio o código
⇢ Interfaces facilmente quebráveis com composicão
⇢ Quebrar encoraja reúso
⇢ Complexidade horizontal ao invés de vertical
Prática
Impureza == Estado
$inpureIncrement = function (&$count) {
$count++;
};
Pureza (relativa)
function pureIncrement($count) {
$myCounter = $count;
$inpureIncrement = function(&$myCounter){
$count++;
};
$inpureIncrement($myCounter);
return $myCounter;
}
Transparência
referencial
let y = f x in y + y
// substituível
f x + f x
Impuros por
natureza
⇢ IO
⇢ print
⇢ random
Funções de
alta ordem
Retornáveis
$sumPartial = function(int $a) {
return function(int $b) use ($a) {
return $a+b;
}
};
$sumOne = $sumPartial(1);
$sumOne(7);
//8
$sumOne(5);
//6
Repassáveis
$incrementTwo = function ($n, $sumOne) {
return $sumOne($sumOne($n));
};
Aplicação parcial
$append3 = function($a, $b, $c) {
return [$a, $b, $c];
};
$append1And2 = fpartial($append3)(1)(2);
$append1And2(5)
//[1,2,5]
$append1And2(9)
//[1,2,9]
Fold
Defina o básico
function sum($a, $b) {
return $a + $b;
}
//function product($a, $b);
//function aORb($a, $b);
//function append($a, $b);
//function greater($a, $b);
function fold(
callable $f,
$init,
$list) {
if (empty($list)) {
return $init;
}
return $f(
fold($f, $init, allbutlast($list)),
last($list)
);
};
Componha
$sumList = fold('sum', 0);
$sumList([1,2,3]);
//6
$multiplyList = fold('product', 0);
$sumList([2,2,2]);
//8
Map
$double = partial('product')(2);
$map($double, [1, 2, 4]));
//[2,4,8]
$map = function($f, $list) {
$applyAndAppend=function($f,$list,$b){
return append($list, $f($b));
};
return fold($applyAndAppend,null)($list);
}
Árvores
$tree = [
1 => [
2,
3 => [
4,
],
]
];
foldTree($sum, $sum, 0, $tree)
//10
Map Tree
$tree = [
3 => [1,4],
1 => [1,5 => [1,2,3]]
];
$result = mapTree($double, $tree);
//[
// 6 => [2,8],
// 2 => [2,10 => [2,4,6]]
//];
Avaliação tardia
g (f input)
⇢ começa f só quando g tenta ler algo
⇢ suspende f
⇢ g roda até precisar ler mais dados
Nth primes
function isPrime($x) {
$seq=ftakeFrom(
finfiniteSequence(2),
($x-2)
);
$multipleOfA=
fpartial('fopaMultipleOfb')
($x);
$result = fmap($multipleOfA, $seq);
return fnoneTrue($result);
}
Nth primes
function primes() {
foreach (finfiniteSequence(1) as $i) {
if (isPrime($i)) {
yield $i;
}
}
}
print_r(ftakefrom(primes(), 10));
//[1, 3, 5, 7, 11, 13, 17, 19, 23, 29]
Conclusão
⇢ Imperativo quando necessário
⇢ Funcional quando possível
⇢ Para novos tipos:
⇢ defina as operações fundamentais
⇢ junte funções
⇢ Seu trabalho não é resolver problemas
⇢ Definir problemas de uma forma que eles se resolvam
Referências
⇢ Why functional programming matters
⇢ http://archive.li/uTYWZ#selection-407.912-407.919
⇢ https://medium.com/@jugoncalves/functional-programming-
should-be-your-1-priority-for-2015-47dd4641d6b9
⇢ https://blog.inf.ed.ac.uk/sapm/2014/03/06/enemy-of-the-
state-or-why-oop-is-not-suited-to-large-scale-software/
⇢ https://www.youtube.com/watch?v=7Zlp9rKHGD4
⇢ https://www.youtube.com/watch?v=q0HRCEKAcas
Dúvidas?
Github: https://github.com/jeanCarloMachado
Twitter: https://twitter.com/JeanCarloMachad
E-mail: contato@jeancarlomachado.com.br

Mais conteúdo relacionado

Mais procurados

Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Luis Gustavo Almeida
 
Comparando dois números
Comparando dois númerosComparando dois números
Comparando dois númerosnataferraz
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...iMasters
 
Func time sleep.c
Func time sleep.cFunc time sleep.c
Func time sleep.calbertinous
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação WebDalton Martins
 
Introdução a programação em python d4 anexo 2 (códigos)
Introdução a programação em python d4   anexo 2 (códigos)Introdução a programação em python d4   anexo 2 (códigos)
Introdução a programação em python d4 anexo 2 (códigos)Moises de Paula
 
Questao.2
Questao.2Questao.2
Questao.2Utyiama
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesStanislaw Pusep
 
Apresentação j query6
Apresentação j query6Apresentação j query6
Apresentação j query6douglasgrava
 
Linguagem c wellington telles - aula 08
Linguagem c   wellington telles - aula 08Linguagem c   wellington telles - aula 08
Linguagem c wellington telles - aula 08profwtelles
 
Lista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizarLista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizarElaine Cecília Gatto
 
[SCTI 2011] - CLI: sobrevivendo na linha de comando
[SCTI 2011] - CLI: sobrevivendo na linha de comando[SCTI 2011] - CLI: sobrevivendo na linha de comando
[SCTI 2011] - CLI: sobrevivendo na linha de comandoSCTI UENF
 

Mais procurados (19)

Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Comparando dois números
Comparando dois númerosComparando dois números
Comparando dois números
 
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
InterCon 2016 - Software as a service usando Go como principal linguagem: os ...
 
Func time sleep.c
Func time sleep.cFunc time sleep.c
Func time sleep.c
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 
Introdução a programação em python d4 anexo 2 (códigos)
Introdução a programação em python d4   anexo 2 (códigos)Introdução a programação em python d4   anexo 2 (códigos)
Introdução a programação em python d4 anexo 2 (códigos)
 
Questao.2
Questao.2Questao.2
Questao.2
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
JasperReports
JasperReportsJasperReports
JasperReports
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Apresentação j query6
Apresentação j query6Apresentação j query6
Apresentação j query6
 
Scatole Nere
Scatole NereScatole Nere
Scatole Nere
 
Generators PHP
Generators PHPGenerators PHP
Generators PHP
 
Shell script
Shell scriptShell script
Shell script
 
Linguagem c wellington telles - aula 08
Linguagem c   wellington telles - aula 08Linguagem c   wellington telles - aula 08
Linguagem c wellington telles - aula 08
 
Lista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizarLista simplesmente encadeada: Operações de buscar e atualizar
Lista simplesmente encadeada: Operações de buscar e atualizar
 
[SCTI 2011] - CLI: sobrevivendo na linha de comando
[SCTI 2011] - CLI: sobrevivendo na linha de comando[SCTI 2011] - CLI: sobrevivendo na linha de comando
[SCTI 2011] - CLI: sobrevivendo na linha de comando
 

Semelhante a Why functional programming matters

Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - FlisolLeonn Leite
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016Leandro Silva
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Arthur Xavier
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3Jose Berardo
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPLuis Gustavo Almeida
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesCarlos Santos
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo realiMasters
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHPDanilo Godoy
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaiMasters
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduinoCampus Party Brasil
 

Semelhante a Why functional programming matters (20)

Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
DevTalk Zoox 04/2016
DevTalk Zoox 04/2016DevTalk Zoox 04/2016
DevTalk Zoox 04/2016
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?Programação funcional em JavaScript: como e por quê?
Programação funcional em JavaScript: como e por quê?
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Clean code
Clean codeClean code
Clean code
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
Advanced live testing em tempo real
Advanced live testing em tempo realAdvanced live testing em tempo real
Advanced live testing em tempo real
 
Nossa experiência com TDD
Nossa experiência com TDDNossa experiência com TDD
Nossa experiência com TDD
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHP
 
JS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na PráticaJS Experience 2017 - WebAssembly na Prática
JS Experience 2017 - WebAssembly na Prática
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Compus Party - processing e arduino
Compus Party - processing e arduinoCompus Party - processing e arduino
Compus Party - processing e arduino
 

Mais de Jean Carlo Machado

Mais de Jean Carlo Machado (11)

Python clean code for data producs
Python clean code for data producsPython clean code for data producs
Python clean code for data producs
 
Domain Driven Design Made Functional with Python
Domain Driven Design Made Functional with Python Domain Driven Design Made Functional with Python
Domain Driven Design Made Functional with Python
 
Search microservice
Search microserviceSearch microservice
Search microservice
 
Git avançado
Git avançadoGit avançado
Git avançado
 
Functional php
Functional phpFunctional php
Functional php
 
Clean code v3
Clean code v3Clean code v3
Clean code v3
 
Clean Code V2
Clean Code V2Clean Code V2
Clean Code V2
 
Review articles bio inspired algorithms
Review articles bio inspired algorithmsReview articles bio inspired algorithms
Review articles bio inspired algorithms
 
Introduction to Rust
Introduction to RustIntroduction to Rust
Introduction to Rust
 
Limitações do HTML no Desenvolvimento de Jogos Multiplataforma
Limitações do HTML no Desenvolvimento de Jogos MultiplataformaLimitações do HTML no Desenvolvimento de Jogos Multiplataforma
Limitações do HTML no Desenvolvimento de Jogos Multiplataforma
 
Clean code
Clean codeClean code
Clean code
 

Why functional programming matters