SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
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…
66%
34%
Netflix Resto
34% de todo
tráfego de internet
na América do
Norte
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
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());
O poder do Rx!
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?
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
);
• 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

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
Retrofit
RetrofitRetrofit
Retrofit
 
DSC IIITL Flutter Workshop
DSC IIITL Flutter WorkshopDSC IIITL Flutter Workshop
DSC IIITL Flutter Workshop
 
Flamingo Commerce Intro
Flamingo Commerce IntroFlamingo Commerce Intro
Flamingo Commerce Intro
 
Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)Test Automation Framework using Cucumber BDD overview (part 1)
Test Automation Framework using Cucumber BDD overview (part 1)
 
Applet in java
Applet in javaApplet in java
Applet in java
 
Flutter, prazer
Flutter, prazerFlutter, prazer
Flutter, prazer
 
Introduction to Java
Introduction to JavaIntroduction to Java
Introduction to Java
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Qualidade de software - Gestão de Projetos de Software - BSI
Qualidade de software - Gestão de Projetos de Software - BSIQualidade de software - Gestão de Projetos de Software - BSI
Qualidade de software - Gestão de Projetos de Software - BSI
 
Flutter
FlutterFlutter
Flutter
 
Flutter UI Framework
Flutter UI FrameworkFlutter UI Framework
Flutter UI Framework
 
Laravel overview
Laravel overviewLaravel overview
Laravel overview
 
스프링 부트와 로깅
스프링 부트와 로깅스프링 부트와 로깅
스프링 부트와 로깅
 
Introduction to blazemeter and jmeter
Introduction to blazemeter and jmeterIntroduction to blazemeter and jmeter
Introduction to blazemeter and jmeter
 
Arquitetura de Microserviços
Arquitetura de MicroserviçosArquitetura de Microserviços
Arquitetura de Microserviços
 
Visão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOKVisão de Testes de Software segundo o SWEBOK
Visão de Testes de Software segundo o SWEBOK
 
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linkerNative hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linker
 
Getting started with flutter
Getting started with flutterGetting started with flutter
Getting started with flutter
 
Building blocks of android
Building blocks of androidBuilding blocks of android
Building blocks of android
 

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

O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
Denis Costa
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESS
elliando dias
 

Ähnlich wie Programação Reativa e Funcional e extensões para PHP (20)

Doctrine for Dummies
Doctrine for DummiesDoctrine for Dummies
Doctrine for Dummies
 
Python
PythonPython
Python
 
Por que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionaisPor que voce precisa (re)aprender linguagens funcionais
Por que voce precisa (re)aprender linguagens funcionais
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
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
 
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
TDC2018SP | Trilha Ruby - Programacao funcional com Ruby, potencialize e simp...
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Mashups: Criando Valor na Web 2.0
Mashups: Criando Valor na Web 2.0Mashups: Criando Valor na Web 2.0
Mashups: Criando Valor na Web 2.0
 
PHP(I-Bim).ppt
PHP(I-Bim).pptPHP(I-Bim).ppt
PHP(I-Bim).ppt
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Javascript
JavascriptJavascript
Javascript
 
Além da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e ErlangAlém da programação funcional com Elixir e Erlang
Além da programação funcional com Elixir e Erlang
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
i-Educar - 1º Seminário PHP no Serpro
i-Educar - 1º Seminário PHP no Serproi-Educar - 1º Seminário PHP no Serpro
i-Educar - 1º Seminário PHP no Serpro
 
Web Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciênciaWeb Scraping: aplicações nos negócios e na ciência
Web Scraping: aplicações nos negócios e na ciência
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Lazy Evaluation em Scala
Lazy Evaluation em ScalaLazy Evaluation em Scala
Lazy Evaluation em Scala
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESS
 
Hands On TensorFlow and Keras
Hands On TensorFlow and KerasHands On TensorFlow and Keras
Hands On TensorFlow and Keras
 

Mehr von Juliana Chahoud

Mehr von Juliana Chahoud (14)

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

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