web-dev-qa-db-ja.com

配列と監視可能な配列の違いは何ですか?

TypeScriptでは、any[]Observable<any[])>の主な違いは何ですか?
それぞれを使用することの短所と長所は何ですか?

15
etrupja

Observableは、Observerパターンの実装に使用されます。このObservableをサブスクライブすると、Observableがデータを送信するときに非同期に通知されます。

Observable<any[])は、配列を含むObervableです。この場合、配列はanyによって型付けされるため、任意の型を含むことができます。

arrayはオブジェクトであり、一度に複数の値を保持できます。

Observableオブジェクトは、Pushベースのコレクションを表します。

ObserverおよびObservableインターフェイスは、オブザーバーデザインパターンとも呼ばれる、プッシュベースの通知のための一般化されたメカニズムを提供します。 Observableオブジェクトは、通知を送信するオブジェクト(プロバイダー)を表します。 Observerオブジェクトは、それらを受け取るクラス(オブザーバー)を表します。

rxjsのドキュメントをご覧ください

配列はリストのようなオブジェクトであり、そのプロトタイプには、トラバーサル操作とミューテーション操作を実行するメソッドがあります。 JavaScript配列の長さもその要素のタイプも固定されていません。

MDN-配列

10
muetzerich

単数形と複数形の両方の空間と時間にわたるさまざまなタイプの値の優れた概要については、 反応の一般理論 を参照してください。

配列は空間反復可能です。つまり、空間の1点に存在し、今すぐ消費でき、また消費したい反復可能オブジェクト(リスト)です。

オブザーバブルはtemporal iterableです。言い換えれば、時間の経過とともに広がるもののリストであり、1つずつ消費します。

具体的な例として、これらのタイプのリストのそれぞれを反復する方法を見てみましょう。

配列

const array: Array<number> = [1, 2, 3];
array.forEach(elt => console.log(elt));

これはsynchronousであり、今すぐ実行されます。

観測可能

const observable: Observable<number> = Observable.from([1, 2, 3]);
observable.subscribe(elt => console.log(elt));

これはasynchronousであり、入ってくると、一度に1つの要素を実行します。

しかし、あなたは少し異なる質問をしました、それは配列と配列のオブザーバブルの違いです(明確にするために、「配列オブザーバブル「それは「オブザーバブルの配列」を意味するものと誤解される可能性があるため、確かに有用ですが、別のものです。

違いは、前述したように、配列は単一の時点での値の単一のリストにすぎないということです。配列のオブザーバブルは、配列のstreamであり、各 "tick"により、全体が新しい、異なる配列になります。

したがって、そこにあるアイテムのリストだけが必要な場合は、配列を使用します。もちろん、配列を変更または変換することはできますが、特定の時点で単一の配列が1つしかないという事実は変わりません。

アレイの新しいバージョン(異なる時点で異なるバージョン)を引き続き取得する予定であり、新しいバージョンをプログラムの異なる部分に「プッシュ」したい場合は、オブザーバブルの配列を使用します。オブザーバブルを「購読」し、更新されるたびに通知されます。

あなたの質問に答えるには:

any[]Observable<any[])>の主な違いは何ですか?

1つは配列で、もう1つは監視可能な(ストリーム)配列です。

それぞれを使用することの短所と長所は何ですか?

長所と短所は、配列が必要な場合は配列を使用する必要があることです。オブザーバブルの配列が必要な場合は、オブザーバブルの配列を使用する必要があります。

あなたの質問はTypeScriptに言及していますが、配列のオブザーバブルを含む配列とオブザーバブルの概念は、基本的に言語に依存しないことに注意してください。

5
user663031