問題タブ [reactive-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
programming-languages - リアクティブプログラミングと関数型リアクティブプログラミングの違い
私は最近リアクティブプログラミングについていくつかの研究を行っていますが、リアクティブと関数型リアクティブの違いについての適切な説明を見つけるのは難しいと感じています。
宣言型またはOOパラダイムを使用するのではなく、機能的なメソッド/パラダイムを使用してリアクティブプログラミングを実装するだけですか?
system.reactive - 件名をコンポーネントに渡しても大丈夫ですか
アーキテクチャの観点から、サブジェクトをコンポーネントに渡すことは問題ないのでしょうか。私が実際に望んでいるのは、コンポーネントにオブザーバブルを公開させることです。ただし、この観測可能なストリームがどこから来るかを制御したいので、コンポーネントが「イベント」を発生させる可能性のあるサブジェクトを通過しても問題ないかどうかを尋ねるのはなぜですか。
さて、これについて詳しく説明しましょう。
たとえば、ユーザー入力を受け取り、キーストロークを抑制し、結果リストを表示するコンポーネントを設計しているとします。実際の検索は別のサービスコンポーネントで行われています。
SearchWidgetクリエーター関数を次のように設計したいと思います。
より高いレベルのコンポーネント(コントローラー/メディエーターなど)は、実際にストリームを接続します。
明らかに、resultStreamは作業を完了するためにinputStreamを必要とします。
上記の例では、resultStreamは、結果リストをリッスンできるSearchWidgetの観点から単純に観察可能になります。ただし、上位レベルのコンポーネント内でサブジェクトとして実装されます。
対照的に、userInputStreamは、SearchWidgetの観点からはサブジェクトになりますが、resultStreamを接続するために事前に必要になるため、より高いコンポーネントレベルでインスタンス化されます。ただし、上位レベルのコンポーネントの観点からは、単純に観察可能です。
高階コードは次のようになります。
上記の実装では、SearchWidgetが初期化される前にuserInputStreamを使用します。もちろん、この方法で実装することもできます。
したがって、カプセル化の観点からは、2番目の実装はより堅牢に見える可能性があります。ただし、件名を渡すと、柔軟性が高まります。
イベントストリームを使用するという概念は非常に現代的であるため、イベントストリームを使用してアプリケーションを設計するときに、全体像のベストプラクティスを見つけるのに苦労しています。
system.reactive - 可能なストリームを区別し、クリーンなソリューションを探します
いくつかの GUI シナリオで RxJS を使用しようとしています。興味深い事例に出会いました。エンティティを表示、編集、作成できるウィジェットがあります。
「AddNewEntity」ボタンをクリックしたとき。editwidget は空のエンティティを作成し、それをロードして編集モードに変更します。ただし、既に編集モードになっている場合は、最初に変更を元に戻すかどうかを尋ねるメッセージが表示されます。[はい] をクリックすると、前に説明したのと同じことが起こります。
だから私はRxがそれで私を助けるかもしれないと思った. これがコードです。
基本的に、2 つのストリームをマージしています。状態が「NotInEditMode」であるウィジェットの状態によってフィルタリングされるボタンへのクリックの 1 つのストリーム。また、反対の状態にフィルター処理されたボタンへの別のクリック ストリームが、ダイアログの戻り値ストリームに射影されます。ダイアログの戻り値は、指定された回答を表す bool の AsyncSubject であることに注意してください。
今、トリッキーな部分です!このようには機能しません!なんで?状態が「NotInEditMode」の場合、最初のストリームが一致するため、ウィジェットが編集モードに設定され、2 番目のストリーム (マージ内の順序のために後で実行される) も一致し、基本的に完全に矛盾した状態になります (ロックされていない編集モードと開いているダイアログ)。
私はそれを修正する2つの方法を見つけました。最初のものは、マージ内の順序を次のように変更します。
ただし、このソリューションは嫌いです。読者には明らかではありません。
幸いなことに、別の解決策を見つけました。
背後にある考え方は、進むべき道は 1 つしかないため、最初に一致したシナリオで他のすべてのシナリオを中止する必要があるというものです。
ただし、よりクリーンなソリューションがあるのではないか、それとも設計されていないものに Rx を使用しようとしているのだろうか ;-)
system.reactive - Rx を使用した監視可能なシーケンスのエラー処理
エラーが発生した場合、シーケンス内の次の要素で実行を再開する監視可能なシーケンスを持つ方法はありますか? この投稿から、実行を再開するには Catch() で新しいオブザーバブル シーケンスを指定する必要があるように見えますが、代わりにシーケンスの次の要素で処理を続行する必要がある場合はどうでしょうか? これを達成する方法はありますか?
更新: シナリオは次のとおりです。処理する必要がある要素がたくさんあります。処理は一連のステップで構成されています。ステップを構成したいタスクに分解しました。ここに投稿された ToObservable() のガイドラインに従って、 タスクごとにコンポジション用のオブザーバブルに変換しました。基本的に私はそのようなことをしています -
または私はこのようなことができます:
要素の1つの処理が例外をスローしたとしましょう. エラーをログに記録して、理想的に進めたいと思います。
c# - マウスの左ボタンをクリックすると、リアクティブな拡張機能を使用して winform で検出されます。イベントで IObservable
Reactive extensions について読み始めました。winformでマウスの左ボタンをクリックするのを見ようとしています。クリックがある場所 (フォームを含むフォーム上の任意のコントロール) を意味します。「クリックが検出されました」というメッセージを表示したいだけです。これまでのところ、
最初の行でマウス イベントが検出されることはわかっています。マウスの左ボタンをクリックするだけです。これをよりよく理解できるように、動作するコードを投稿してください。今、.takeuntil など、これまで使用したことのない流行語で追い風になっています。私の質問をさらに洗練させます。Rxに相当するものは何ですか
これにより、観察可能なすべてのマウスまたはキーボード イベントが観察されます。ありがとうございました
haskell - リアクティブバナナでの振る舞い
すみません、反応バナナとFRPを調べ始めたところです。
反応バナナの作成者は、私の提案に従ってこの例を作成しました。この例では、増減できるカウンターを作成します。彼は、イベントを蓄積する accumE 関数を使用します。Event 型はある程度理解できて、かなりのテストができたと思いますが、Behavior もあったことを思い出しました。調べてみましたが、似たような状況で使われることを意図しているようです。accumE がイベントに対して行うように、既存の変数を変更します。
動作とは何を意味し、どのような使用例がありますか?
haskell - react-banana-wx を使用した UI 入力
反応バナナを使用する場合、UI 要素のコンテンツをどのように取得しますか? event0 は type のイベントを返しますEvent ()
。これは、コントロールの型ではなくユニット型です。event1 はタイプ のイベントを受け取りますがEvent w (a -> IO ())
、コマンドのタイプはEvent w (IO ())
です。mapAccumE と mapAccumB は純粋な関数をパラメーターとして受け取るためget text foo
、それらと一緒に使用することはできません。
c# - リストの操作およびリアクティブ拡張機能
私はリアクティブ拡張機能の調査を開始しましたが、次のことを行う方法を知りたいです (単純にしてみてください)。
文字列 (またはその他の型) のリストを持っている
上記のリストにアイテムが追加されたら、それで何かをします。
haskell - Haskell FrpパッケージのWindowsインストール?
Windows にリアクティブなバナナ パッケージをインストールしようとしましたが、ほとんど成功しませんでした。パッケージについては知っているようですが、インストールに失敗します。ヒントはありますか?
OK、すべての wx-stuff をインストールしました - いくつかの手順を実行しました。wx-config、wxWidgets の順にインストールし、Haskell パーツ (wx、wxcore、reactive-banana.wx) をインストールします。しかし、基本的な Reactive とカテゴリ エクストラは、上記のように失敗します。- カテゴリ エクストラの 99 のステップ 39 が失敗します。
アップデート:
Haskell の Wx ユニバースは少し混乱しています。これに関する多くの注意事項と、Windows での wx & wxHaskell に関する問題の説明、古いバージョンの GHC が必要な提案などがあります。コードは現在の MSoft コンパイラと互換性がないため、他のコンパイラのインストールが必要になるなどです。全体として数時間突っついた後、私にはかなりがっかりしました。wx-config、wxPack、wxWidgets、wxHaskell、そして cabal wx & wxcore; からインストールしました。すべてが成功を報告しましたが、それでも失敗しました (wxmsw28_gcc.dll が見つかりません; ライブラリにはあります)。彼らの最初のテスト (サンプル/コントロール...) は失敗します。wxWidgets と wxHaskell のページでは、すべてのサンプル リンクとその他多くのリンクが壊れています。再起動後 (?!)、いくつかのテストを実行しているように見えるので、成功することを期待しています。
私は魔法の「apt-get install」のような体験を望んでいました。
FRP の場合 -- FRP の例 (leksah 内) では、「リンク先が見つかりません...」というエラー メッセージが多数表示されますが、今のところ実行されています。
全体として、私の経験からすると、wxHaskell と FRP は Windows では使いにくいようです。Haskell の使いやすさと有用性の良い例として、私がクラスに割り当てるようなものではないことは確かです! :-)
これらのパッケージに含まれるすべての複雑さと作業に感謝します。文句を言うつもりはありません。ただの体験レポートです。おそらく、wxHaskell パッケージは一般的に使用されていないか、..??
haskell - Haskell:FRPリアクティブパーセク?
Parsec
Haskellにリアクティブ(または他の純粋な関数型パーサー)はありますか(または持つことは可能ですか)?
簡単に言えば、パーサーにcharごとにフィードして、出力を取得するのに十分な量の結果を取得したいと考えています。
または、もっと簡単に、どうすればそれを実行できますfoldr
かmap
?
そのような反応的な振る舞いをサポートするために、それらの異なるバージョンが必要ですか?
編集
私の質問は特にFRPについてです。例としてパーサーを使用しました。これは、質問を明確にし、必要なものの全体像を示すために考えられる最善の方法でした。
FRPはUIだけではないと思いますよね?