RxJS (Reactive Extenstions)


RxJSとは何ですか。


RxJsが何であるかを説明する前に、2つの用語を理解する必要がある.
  • Reactive Programming (RP)
  • Functional Reactive Programming (FRP)
  • Reactive Extensions (Rx)
  • Reactive Programming (RP)


    Reactive programming is programming with asynchronous data streams
    プロアクティブプログラミングは、非同期データストリームを処理するプログラム設計です.すなわち,コアは,すべてのコンテンツを非同期データストリームと見なし,傍観者設計モードを用いて非同期イベントを処理することである.

    AsyncとObserver


    非同期イベントとは、さまざまなタスクを実行しながら、一部のタスクが非同期で完了することを意味します.Webやアプリケーションで発生する非同期イベントの種類は非常に多様です.例えば、ユーザがアプリケーションにログインしたり、画像を閲覧したり、パスワードを変更したりすることは、ユーザインタフェースに干渉せず、バックグラウンドからデータをインポートする操作を非同期操作として表現することができる.
    データストリーム(Streams)は、時間順に並べられたアクティブなストリームです.Asyncデータ・ストリームは次のように表すことができます.

    Reactive Programmingは、ユーザーがイベントが発生するたびにユーザーのイベントを観察し、値が変化したときにデータストリームに値を入れて、タイムリーに反応させる.この観察モードを観察者設計モードと呼ぶ.

    Functional Reactive Programming(FRP)


    Functional reactive programming is a programming paradigm for reactive programming using the building blocks of functional programming
    簡単に言えば,Functional Reactive Programmingとは,関数式プログラミングを用いて前に学習したRPを実現する概念である.次の例は、次の配列のスペースを削除し、すべてのアルファベットを大文字に変換するプログラムです.
    コマンドプログラミング
    const log = o => console.log(o);
    const words = ["car ", " plain ", " table"];
    
    const processedWords = [];
    for (let i = 0; i < words.length; i++){
      processedWords.push(words[i].trim().toUpperCase());
    }
    log(processedWords);
    かんすうしきプログラミング
    const log = o => console.log(o);
    const words = ["car ", " plain ", " table"];
    
    const pipeAll = (...fns) => x => fns.reduce((v,fn)=> fn(v), x);
    
    const trim = str => str.trim();
    const toUpperCase = str => str.toUpperCase();
    const trimAndUpperCase = pipeAll(trim, toUpperCase);
    
    const processedWords = words.map(trimAndUpperCase);
    
    log(processedWords)
    上記のコードから、コマンドプログラミングコードはより短く、より簡潔に見えます.しかし、関数プログラミングの利点は、可読性が強く、作成した関数を再使用できることです.これらの利点を持つ関数プログラミングをRPとともに使用すると、より強力なツールになります.

    Reactive Extensions (Rx)


    An API for asynchronous programming with obervable streams
    要するに,Reactive Extensionsは観測可能なストリームを用いて非同期プログラミングを行うAPIである.すなわち、Rxは、前述のRPやFRPなどのプログラミングモードではなく、APIである.
    Rxは、debonse、throttlingなどの関数だけでなく、RPの非同期データストリームを用いて、時間とともに変化する動作を継続的に観察し、実行することができる.

    リファレンス

  • https://brunch.co.kr/@oemilk/79#comment
  • https://m.blog.naver.com/jdub7138/220983291803
  • https://itnext.io/functional-reactive-programming-explained-in-a-simple-way-in-javascript-yes-in-a-simple-way-925b14cddf75