Programação
Reativa e Funcional e
extensões para PHP
#darkmiraTour
@jchahoud

Maio 2017
ReactiveX ou Rx
X
X
Juliana Chahoud
@jchahoud
Mobile Developer
Scala
Scala RxSwift RxJAVA
Rx e funcional são uma arquitetura?
Um pattern?
Não.. são outros paradigmas de
programação
1. Concorrência de maneira fácil !

2. Fácil de testar

3. Fácil de ler e entender os resultados 

4. Evitar problemas confusos e erros no código

5. Código conciso (Menos é mais)
Mas porque raios me importar?
Mas melhor
do que acreditar
em mim…
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
66%
34%
Netflix Resto
34% de todo
tráfego de internet
na América do
Norte
Programação Reativa e Funcional e extensões para PHP
Uma historinha de como o Netflix, Microsoft e outros
resolveram
GRANDES problemas de "assincronia"
… pensando diferente sobre EVENTOS
Tudo no Netflix é
assíncrono
• Startup
• Players
• Acesso a dados
• Animações
• etc…
Um inferno
chamado Async!!
• Memory leaks
• Condições de corrida
• Callbacks "aninhados
• Máquinas de estados
complexas
• etc…
Imperativo X Reativo
Pensando de maneira "Reativa"
Então o que é programação reativa?
programar com fluxos(streams) de
dados assíncronos
fluxo (streams) de dados assíncronos
sequência de eventos que ocorrem
em um período de tempo
X
Indica um evento,
com algum valor
Indica um erro
Indica fim do
stream
Três coisas podem ser emitidas
X
Subscribe !
X
function ($x) {
//do something
}
function (Exception $e) {
….},
function () {
//completou
}
X
Observers
Observable
(algo observável)
function ($x) {…}
function () {…}
Observer
Stream
Observer Design Pattern
Programação Reativa e Funcional e extensões para PHP
Observable
programação funcional
RxPHP, RxNet, RxJava, RxJS, RxSwift, etc
1 2 3 4
Ex: Stream (Observável)
a partir de um array
$stream = RxObservable ::fromArray([1, 2, 3, 4]);
1 2 3 4
“Subscribing" representado por…
$stream->subscribe
$stream = RxObservable::fromArray([1, 2, 3, 4]);
$stream->subscribe(
function ($x) {
echo 'Next: ', $x, PHP_EOL;
},
function (Exception $ex) {
echo 'Error: ', $ex->getMessage(), PHP_EOL;
},
function () {
echo 'Completed', PHP_EOL;
}
);
• Criar streams
• Transformar
• Filtrar
• etc
Caixa de ferramentas para…
Aqui entra a “mágica" do funcional
1 2 3
Map
map( x => 10*x)
10 20 30
$observable = RxObservable::fromArray([1, 2, 3]);
$observable
->map(function ($elem) {
return $elem * 10;
})
->subscribe($stdoutObserver);
Nos permite encadear funções como:
Stream.map(f).scan(g)…
Imutabilidade
1 2 3
Reduce
(acumulador ou agregador)
reduce ( (x,y) => x+y)
6
$source = RxObservable::fromArray([1,2,3]);
$subscription = $source
->reduce(function ($x, $y) {
return $x + $y;
})
->subscribe($createStdoutObserver());
Programação Reativa e Funcional e extensões para PHP
O poder do Rx!
Programação Reativa e Funcional e extensões para PHP
OK! Quero outro
exemplo da vida real
Mantra do Rx:
(quase) tudo pode ser um stream
Observable a partir de uma request
response
RxReactHttp::get('https://www.google.com/');
$observableRequest = RxReactHttp::get('https://
www.google.com/');
$observableRequest->subscribe(
function ($data) {
echo $data, PHP_EOL;
}
);
Observable a partir de uma request
Observable a partir de uma request
RxReactHttp::get('https://www.google.com/');
Múltiplas requests
Será que é possível…
Criar um stream de observables?
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
Programação Reativa e Funcional e extensões para PHP
Consolida “emissões” em "galhos"…
… em uma única stream
Múltiplas requests
$requests = RxObservable::fromArray
(['https://api.xxx','https://api.xx2']);
$responseStream = $requestStream
->flatMap(function ($requestUrl) {
return RxReactHttp::get($requestUrl);
});
$responseStream->subscribe(
//reage de acordo
);
Programação Reativa e Funcional e extensões para PHP
• http://reactivex.io

• https://github.com/RxPHP

• https://medium.com/netflix-techblog/reactive-programming-in-
the-netflix-api-with-rxjava-7811c3a1496a

Mais sobre Rx e Funcional
Obrigada!
#darkmiraTour
@jchahoud

Mais conteúdo relacionado

PPS
Aula de Seios da face
PDF
PPT
DOC
Matriz de matemática de 6º ao 9º - 2014
PPTX
Desing thinking
PPT
Equação de 1º grau
PPTX
Marketing digital
Aula de Seios da face
Matriz de matemática de 6º ao 9º - 2014
Desing thinking
Equação de 1º grau
Marketing digital

Mais procurados (20)

PDF
RACIOCÍNIO LOGICO PARTE 01
PPTX
Os fisiocratas
PDF
Medidas de tendencia central
PPT
Análise combinatória
PDF
Explicando o Modelo de Negócios (canvas) - Virada Empreendedora 2013
PPTX
Medidas de dispersão desviomédio, desvio-padrão e variância.pptx
PDF
Ce spaece-2016-matriz-mt-3 em
PDF
Apostila sistemas lineares 2x2 para 05.11
PPS
Multiplicacao de matrizes
PPT
Mix de Marketing - Preço - Parte II
PDF
Exercícios Resolvidos: Frequência relativa, absoluta, acumulada
PDF
Tomografia computadorizada 02 (1)
PDF
Exercicios de estatistica resolvido.5
PPT
Problemas de 1º grau
PPTX
Trigonometria na circunferência
PPTX
Função logarítmica
PPT
Dados, Informação e Conhecimento
PPT
Empreendedorismo na comunicação
PPT
Aprenda Porcentagem
PPTX
Apresentação de Design Thinking
RACIOCÍNIO LOGICO PARTE 01
Os fisiocratas
Medidas de tendencia central
Análise combinatória
Explicando o Modelo de Negócios (canvas) - Virada Empreendedora 2013
Medidas de dispersão desviomédio, desvio-padrão e variância.pptx
Ce spaece-2016-matriz-mt-3 em
Apostila sistemas lineares 2x2 para 05.11
Multiplicacao de matrizes
Mix de Marketing - Preço - Parte II
Exercícios Resolvidos: Frequência relativa, absoluta, acumulada
Tomografia computadorizada 02 (1)
Exercicios de estatistica resolvido.5
Problemas de 1º grau
Trigonometria na circunferência
Função logarítmica
Dados, Informação e Conhecimento
Empreendedorismo na comunicação
Aprenda Porcentagem
Apresentação de Design Thinking
Anúncio

Semelhante a Programação Reativa e Funcional e extensões para PHP (20)

PDF
InterCon 2017 - Desbravando o Mundo da Programação Reativa - Erich Oliveira
PDF
Node.js, Observables e RxJs - Programação reativa no Backend! - FCTech
PDF
Make it amazing - Transformando o desenvolvimento em uma obra de arte abstrat...
PDF
Programação functional reativa: lidando com código assíncrono
PPTX
Interfaces reativas com ReactiveUI no Xamarin.Forms
PPTX
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
PDF
Programando interfaces reativas com Xamarin e Reactive UI
PDF
Implementando MVC com AJAX
PDF
Desmistificando a programação reativa
PDF
RxJava - Programação assíncrona para Android.
PPT
TDC2016SP - Web Moderna além do Front-End com AngularJS
PDF
TDC2017 | São Paulo - Trilha IOS How we figured out we had a SRE team at - Re...
PPTX
Introdução ao WebFlux
PDF
Angular + Redux (ngRx)
PPT
PHP e AJAX: do Request ao Framework
PPTX
Observables RxJava/Kotlin
PDF
De OO para FP
PDF
Workshop Hands-On APIX 2018 - Trilha Básica
PPT
Como fazer mais em aplicações RIA escrevendo menos
PPT
Como Fazer (+) Em AplicaçõEs Ria Escrevendo ( )
InterCon 2017 - Desbravando o Mundo da Programação Reativa - Erich Oliveira
Node.js, Observables e RxJs - Programação reativa no Backend! - FCTech
Make it amazing - Transformando o desenvolvimento em uma obra de arte abstrat...
Programação functional reativa: lidando com código assíncrono
Interfaces reativas com ReactiveUI no Xamarin.Forms
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
Programando interfaces reativas com Xamarin e Reactive UI
Implementando MVC com AJAX
Desmistificando a programação reativa
RxJava - Programação assíncrona para Android.
TDC2016SP - Web Moderna além do Front-End com AngularJS
TDC2017 | São Paulo - Trilha IOS How we figured out we had a SRE team at - Re...
Introdução ao WebFlux
Angular + Redux (ngRx)
PHP e AJAX: do Request ao Framework
Observables RxJava/Kotlin
De OO para FP
Workshop Hands-On APIX 2018 - Trilha Básica
Como fazer mais em aplicações RIA escrevendo menos
Como Fazer (+) Em AplicaçõEs Ria Escrevendo ( )
Anúncio

Mais de Juliana Chahoud (14)

PDF
Usando React Native & Multi Módulos para Escalar App Creditas
PDF
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
PDF
Desenvolvimento de Apps Mobile - Tendências para 2018
PDF
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
PDF
Desenvolvimento para experiências em real time com foco na segunda tela
PDF
Usando o Twitter na Internet das Coisas - #WebBR2016
PDF
Microservices: Utilizando o Twitter como Plataforma
PDF
Integrações de APIs do Google no iOS (DevFest NE e SP)
PDF
Apple Watch - Digital Day da CI&T
PDF
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
PDF
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
PDF
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
PDF
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
PDF
Planejamento para Serviços Web Semânticos
Usando React Native & Multi Módulos para Escalar App Creditas
[Cocoaheads Conference:2018] Além de prints e breakpoints: truques para um De...
Desenvolvimento de Apps Mobile - Tendências para 2018
A SOLUÇÃO DO TWITTER PARA DESENVOLVIMENTO DE MELHORES APPS
Desenvolvimento para experiências em real time com foco na segunda tela
Usando o Twitter na Internet das Coisas - #WebBR2016
Microservices: Utilizando o Twitter como Plataforma
Integrações de APIs do Google no iOS (DevFest NE e SP)
Apple Watch - Digital Day da CI&T
Semcomp - USP São Carlos - Desenvolvendo um aplicativo iOS com Swift
MapKit na prática: Desenvolvendo um aplicativo iOS que exibe Pontos de Intere...
Swift, a nova linguagem de programação da Apple (CocoaHeads Sao Paulo)
Dissertação de Mestrado - Planejamento para Serviços Web Semânticos
Planejamento para Serviços Web Semânticos

Último (12)

PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Jira Software projetos completos com scrum
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPTX
Tipos de servidor em redes de computador.pptx
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Utilizando code blockes por andre backes
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Conceitos básicos de Redes Neurais Artificiais
Jira Software projetos completos com scrum
Manejo integrado de pragas na cultura do algodão
Analise Estatica de Compiladores para criar uma nova LP
Viasol Energia Solar -Soluções para geração e economia de energia
Tipos de servidor em redes de computador.pptx
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Utilizando code blockes por andre backes
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Processos no SAP Extended Warehouse Management, EWM100 Col26
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Proposta de Implementação de uma Rede de Computador Cabeada.pptx

Programação Reativa e Funcional e extensões para PHP