Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

909 views

Published on

Slides da palestra https://joind.in/event/darkmira-tour-php-2017/programao-reativa-funcional-e-extenses-para-php efetuada no #darkmiraTour 2017

Descrição:
Currying? Observables? Map, Reduce? Aprenda as ideias por trás da programação reativa funcional sem ficar perdido com tantos jargões! Além desses principais conceitos, serão demonstrados alguns exemplos de uso de RxPHP, um conjunto de bibliotecas com extensões reativas para PHP.

Mais info sobre o evento:

https://php.darkmiratour.rocks/2017/team/juliana-chahoud/

https://php.darkmiratour.rocks/2017/palestras/

Published in: Technology
  • Login to see the comments

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

  1. 1. Programação Reativa e Funcional e extensões para PHP #darkmiraTour @jchahoud
 Maio 2017
  2. 2. ReactiveX ou Rx X X
  3. 3. Juliana Chahoud @jchahoud Mobile Developer
  4. 4. Scala
  5. 5. Scala RxSwift RxJAVA
  6. 6. Rx e funcional são uma arquitetura? Um pattern? Não.. são outros paradigmas de programação
  7. 7. 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?
  8. 8. Mas melhor do que acreditar em mim…
  9. 9. 66% 34% Netflix Resto 34% de todo tráfego de internet na América do Norte
  10. 10. Uma historinha de como o Netflix, Microsoft e outros resolveram GRANDES problemas de "assincronia" … pensando diferente sobre EVENTOS
  11. 11. Tudo no Netflix é assíncrono • Startup • Players • Acesso a dados • Animações • etc…
  12. 12. Um inferno chamado Async!! • Memory leaks • Condições de corrida • Callbacks "aninhados • Máquinas de estados complexas • etc…
  13. 13. Imperativo X Reativo
  14. 14. Pensando de maneira "Reativa"
  15. 15. Então o que é programação reativa? programar com fluxos(streams) de dados assíncronos
  16. 16. fluxo (streams) de dados assíncronos sequência de eventos que ocorrem em um período de tempo
  17. 17. X Indica um evento, com algum valor Indica um erro Indica fim do stream Três coisas podem ser emitidas
  18. 18. X Subscribe !
  19. 19. X function ($x) { //do something } function (Exception $e) { ….}, function () { //completou }
  20. 20. X Observers Observable (algo observável) function ($x) {…} function () {…}
  21. 21. Observer Stream
  22. 22. Observer Design Pattern
  23. 23. Observable programação funcional RxPHP, RxNet, RxJava, RxJS, RxSwift, etc
  24. 24. 1 2 3 4 Ex: Stream (Observável) a partir de um array $stream = RxObservable ::fromArray([1, 2, 3, 4]);
  25. 25. 1 2 3 4 “Subscribing" representado por… $stream->subscribe
  26. 26. $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; } );
  27. 27. • Criar streams • Transformar • Filtrar • etc Caixa de ferramentas para…
  28. 28. Aqui entra a “mágica" do funcional
  29. 29. 1 2 3 Map map( x => 10*x) 10 20 30
  30. 30. $observable = RxObservable::fromArray([1, 2, 3]); $observable ->map(function ($elem) { return $elem * 10; }) ->subscribe($stdoutObserver);
  31. 31. Nos permite encadear funções como: Stream.map(f).scan(g)… Imutabilidade
  32. 32. 1 2 3 Reduce (acumulador ou agregador) reduce ( (x,y) => x+y) 6
  33. 33. $source = RxObservable::fromArray([1,2,3]); $subscription = $source ->reduce(function ($x, $y) { return $x + $y; }) ->subscribe($createStdoutObserver());
  34. 34. O poder do Rx!
  35. 35. OK! Quero outro exemplo da vida real
  36. 36. Mantra do Rx: (quase) tudo pode ser um stream
  37. 37. Observable a partir de uma request response RxReactHttp::get('https://www.google.com/');
  38. 38. $observableRequest = RxReactHttp::get('https:// www.google.com/'); $observableRequest->subscribe( function ($data) { echo $data, PHP_EOL; } ); Observable a partir de uma request
  39. 39. Observable a partir de uma request RxReactHttp::get('https://www.google.com/');
  40. 40. Múltiplas requests Será que é possível…
  41. 41. Criar um stream de observables?
  42. 42. Consolida “emissões” em "galhos"…
  43. 43. … em uma única stream
  44. 44. 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 );
  45. 45. • 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
  46. 46. Obrigada! #darkmiraTour @jchahoud

×