semantic-typescript 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/readme.jp.md CHANGED
@@ -1,204 +1,222 @@
1
- # Semantic-TypeScript: パラダイムを転換するストリーム処理ライブラリ
1
+ # Semantic-TypeScript
2
+ フローにインデックスを。データを精密に制御。
2
3
 
3
- ## はじめに
4
- Semantic-TypeScriptは、ストリーム処理技術における大きな進歩を表しており、JavaScriptのジェネレーター関数、Javaストリーム、およびデータベースのインデックス作成パラダイムから最も効果的な概念を統合しています。その基本的な設計原則は、洗練された遅延評価とインテリジェントなインデックス作成を通じて、非常に効率的なデータ処理パイプラインを構築することに焦点を当てています。このライブラリは、現代のTypeScriptおよびJavaScript開発向けに特別に設計された、厳密に型安全で関数型的に純粋なストリーミング操作体験を提供します。
4
+ ---
5
5
 
6
- 従来の同期処理アーキテクチャとは対照的に、Semantic-TypeScriptは同期(Iterable)と非同期(AsyncIterable)の両方のデータソースを優雅に扱う統一モデルを実装しています。ストリーム生成中、データの流れと終了はコールバックメカニズムによって正確に制御され、これにより、ライブラリは例外的な優雅さを持って以下の処理を可能にします:
7
- - 確定的な制御を伴うリアルタイムデータストリーム(DOMイベント、WebSocket、インターバル)
8
- - メモリ効率の良い遅延パイプラインによる大規模データセット
9
- - 流暢で宣言的なAPIによる複雑なデータ変換
6
+ ### 概要
10
7
 
11
- このライブラリの革新的なアプローチは、開発者がデータのシーケンスとどのように対話するかを根本的に再構想し、単一のまとまりのあるパッケージの中で、前例のないパフォーマンス特性と開発者の人間工学の両方を提供します。
8
+ Semantic-TypeScriptは、JavaScriptの`GeneratorFunction`、Java Streams、MySQLスタイルのインデックスといった最も効果的な概念を統合し、ストリーム処理技術において大きな飛躍を遂げました。その中核にある哲学はシンプルかつ強力です。それは、力任せの反復処理ではなく、インテリジェントなインデックス付けを通じて、非常に効率的なデータ処理パイプラインを構築することです。
12
9
 
13
- ## コア哲学:定義と実行の分離
14
- Semantic-TypeScriptの主要なアーキテクチャ的洞察は、ストリームの定義とその実行の明確な分離です:
15
- - **Semantic<E>**: データ変換パイプラインの不変で遅延的な青写真。どのような操作(フィルター、マップなど)が実行されるかを定義します。
16
- - **Collectable<E>**: ストリームの実体化された実行可能なビュー。Semanticから取得され、パイプラインを実行して結果を生成するためのすべての終端操作(collect、forEachなど)を提供します。
10
+ 従来のライブラリが同期的なループや扱いにくいPromiseチェーンを強いる場面で、Semantic-TypeScriptは、モダンなフロントエンド開発の要求に応える、完全非同期、関数型的に純粋、厳密なタイプセーフを備えた体験を提供します。
17
11
 
18
- この分離は明確なメンタルモデルを強制し、最大速度のために不要なソートをスキップするためにUnorderedCollectableを選択するなどの強力な最適化を可能にします。
12
+ その洗練されたモデルでは、データは上流のパイプラインが明示的に`accept`(およびオプションで`interrupt`)コールバックを呼び出した時にのみ、コンシューマーに到達します。必要な**正確なタイミング**において、完全な制御をあなたが握ります。
19
13
 
20
- ## なぜSemantic-TypeScriptを選ぶのか?
21
- データストリーム処理に適切なライブラリを選択することは、パフォーマンス、型安全性、表現力のバランスを取ることを伴います。Semantic-TypeScriptは、これらすべての次元で優れるように設計されています。
14
+ ---
22
15
 
23
- ### 1. すべてのデータシーケンスのための統一された型安全パラダイム
24
- 静的配列、リアルタイムイベント、非同期チャンクなど、あらゆるデータシーケンスを処理するための一貫した宣言的APIを提供し、エンドツーエンドの型安全性を確保するためにTypeScriptの完全な力を活用します。これにより、ランタイムエラーの全クラスを排除し、ストリーム操作を予測可能でコンパイラ検証済みのアクティビティに変えます。
16
+ ### 開発者が選ぶ理由
25
17
 
26
- ### 2. インテリジェントな遅延性による妥協のないパフォーマンス
27
- 中核的には、このライブラリは遅延評価に基づいて構築されています。フィルター、マップ、flatMapなどの操作は単に処理パイプラインを構成するだけで、終端操作が呼び出されるまで実際の作業は行われません。これは、limit、anyMatch、またはカスタム中断コールバックを介した短絡評価機能と組み合わされ、処理を早期に停止させ、大規模または無限のストリームの効率を劇的に向上させます。
18
+ ・**ボイラープレートなしのインデックス付け** あらゆる要素が、自然または独自のインデックスを保持します。
28
19
 
29
- ### 3. `Collector<E, A, R>` パターンの力
30
- Javaに触発され、Collectorパターンは柔軟性のエンジンです。これは、ストリーム要素をどのように累積するかの仕様を、ストリーム自体の実行から分離します。ライブラリは日常業務のための豊富な組み込みコレクタ(toArray、groupBy、summateなど)を提供する一方、独自の複雑で再利用可能なリダクションロジックを実装することを簡単にします。これは、固定された終端メソッドのセットよりもはるかに強力で合成可能です。
20
+ ・**純粋関数型スタイル** 完全なTypeScriptの型推論を伴います。
31
21
 
32
- ### 4. 現代のWebおよび非同期データへの第一級サポート
33
- Semantic-TypeScriptは、現代の開発のために設計されています。現代のWebソースに対するネイティブのファクトリメソッドを提供します:
34
- - 静的データのための `useFrom(iterable)`, `useRange()`
35
- - 時間ベースのストリームのための `useInterval()`, `useAnimationFrame()`
36
- - チャンク化されたバイナリデータ処理のための `useBlob()`
37
- - リアルタイムイベントストリームのための `useWebSocket()`, `useDocument()`, `useWindow()`
22
+ ・**リーク対策済みイベントストリーム** `useWindow`、`useDocument`、`useHTMLElement`、`useWebSocket`は安全性を考慮して構築されています。`limit(n)`、`sub(start, end)`、`takeWhile(predicate)`を使って境界を定義すれば、ライブラリがクリーンアップを管理します。残存するリスナーもメモリリークもありません。
38
23
 
39
- ### 5. 基本的な集計を超えて:組み込み統計分析
40
- 単純な合計や平均を超えてください。このライブラリは専用のNumericStatisticsおよびBigIntStatisticsインターフェースを提供し、分散、標準偏差、中央値、歪度、尖度などの高度な統計尺度にストリームから直接アクセスできるようにします。これにより、複雑なデータ分析がワンライナーに変わります。
24
+ ・**組み込み統計機能** 平均、中央値、最頻値、分散、歪度、尖度を含む、包括的な数値(`number`/`bigint`)分析。
41
25
 
42
- ### 6. 開発者の人間工学のために設計
43
- - **流暢で連鎖可能なAPI**: 複雑なデータパイプラインを読みやすい連続的なチェーンとして記述できます。
44
- - **包括的なユーティリティスイート**: 必須のガード(isFunction、isIterable)、ユーティリティ(useCompare、useTraverse)、および関数型インターフェースが含まれています。
45
- - **Optional<T> 統合**: 値の不在を安全にモデル化し、nullポインタの懸念を排除します。
46
- - **パフォーマンスガイダンス**: 速度のために順序なしコレクションを使用するタイミングと、シーケンスのために順序ありを使用するタイミングに関する明確なガイダンス。
26
+ ・**予測可能なパフォーマンス** 要件に基づいて、順序付きまたは順序なしのコレクターを選択できます。
47
27
 
48
- ## インストール
49
- ```bash
50
- npm install semantic-typescript
51
- ```
28
+ ・**メモリ効率** — ストリームは遅延評価されるため、メモリの懸念を軽減します。
52
29
 
53
- ## 実践におけるコアコンセプト
30
+ ・**未定義動作なし** — TypeScriptが型安全性とnull安全性を保証します。入力データは、コールバック関数内で明示的に変更されない限り、変更されません。
54
31
 
55
- ### 1. ストリームの作成(Semantic)
56
- ファクトリ関数を使用してさまざまなソースからストリームを作成できます。
57
- ```typescript
58
- import { useFrom, useInterval, useDocument } from 'semantic-typescript';
59
-
60
- // 静的配列から
61
- const staticStream = useFrom([1, 2, 3, 4, 5]);
62
-
63
- // 非同期ジェネレーターから
64
- const asyncStream = useFrom(async function*() {
65
- yield 1;
66
- yield 2;
67
- });
32
+ ---
68
33
 
69
- // 時間ベースのストリーム
70
- const tickStream = useInterval(1000); // 毎秒発行
34
+ ### インストール
71
35
 
72
- // DOMイベントストリーム(以下の重要な注意点を参照)
73
- const clickStream = useDocument('click');
36
+ ```bash
37
+ npm install semantic-typescript
74
38
  ```
75
-
76
- ### 2. ストリームの変換(中間操作)
77
- 操作は遅延的に連鎖してパイプラインを定義します。
78
- ```typescript
79
- const processedStream = staticStream
80
- .filter(x => x % 2 === 0) // 偶数だけを保持
81
- .map(x => x * 10) // 10倍
82
- .flatMap(x => [x, x + 1]) // 各要素を2つに変換
83
- .distinct(); // 重複を削除
84
- // まだ何も実行されていません
39
+ または
40
+ ```bash
41
+ yarn add semantic-typescript
85
42
  ```
86
43
 
87
- ### 3. ストリームの実行(終端操作)
88
- 結果を得るには、Collectableを取得し、終端操作を呼び出す必要があります。
89
- ```typescript
90
- // パフォーマンスのために順序なしcollectableを取得
91
- const resultArray = await processedStream.toUnordered().toArray();
92
- console.log(resultArray); // 例: [20, 21, 40, 41]
93
-
94
- // 組み込みコレクタを使用
95
- const sum = await processedStream.toUnordered().collect(useSummate());
96
- console.log(sum);
97
-
98
- // または汎用collectメソッドを使用
99
- const customResult = await processedStream.toOrdered().collect(
100
- () => new Map<number, number>(),
101
- (map, element, index) => map.set(index, element),
102
- map => map
103
- );
104
- ```
44
+ ---
105
45
 
106
- ### 4. 重要:イベントストリームの操作
107
- イベントストリーム(useDocument、useWindow、useHTMLElement、useWebSocket)は本質的に無限です。イベントの収集を停止してストリームを完了するタイミングを定義するために、sub、takeWhile、limitなどの操作を使用する必要があります。そうしないと、終端操作は無期限に待機します。
108
- ```typescript
109
- import { useDocument } from 'semantic-typescript';
46
+ ### クイックスタート
110
47
 
111
- // 最初の5回のクリックだけを収集
112
- const first5Clicks = await useDocument('click')
113
- .limit(5) // <- 必須:ストリームを5つのイベントに制限
48
+ ```typescript
49
+ import { useOf, useFrom, useRange, useWindow, useHTMLElement, useWebSocket, useText, useStringify } from "semantic-typescript";
50
+
51
+ // 数値の統計
52
+ let summate: number = useOf(10, 20, 30, 40)
53
+ .map((n: number): number => n * 2)
54
+ .toNumericStatistics() // 終端操作の前に必須
55
+ .summate(); // 200
56
+
57
+ // Bigintの統計
58
+ let summate: bigint = useOf(10n, 20n, 30n, 40n)
59
+ .map((n: bigint): bigint => n * 2)
60
+ .toBigIntStatistics() // 終端操作の前に必須
61
+ .summate(); // 200n
62
+
63
+ // インデックスでストリームを逆順に
64
+ useFrom([1, 2, 3, 4, 5])
65
+ .redirect((element: E, index: bigint): bigint => -index) // 負のインデックスで逆順
66
+ .toOrdered() // toOrdered() を呼び出してインデックス順を維持
67
+ .toArray(); // [5, 4, 3, 2, 1]
68
+
69
+ // ストリームをシャッフル
70
+ useFrom([1, 2, 3, 4, 5])
71
+ .shuffle()
72
+ .toOrdered()
73
+ .toArray(); // 例: [2, 5, 1, 4, 3]
74
+
75
+ // ストリーム内の要素を平行移動
76
+ useFrom([1, 2, 3, 4, 5])
77
+ .translate(2) // 要素を2位置右にシフト
78
+ .toOrdered()
79
+ .toArray(); // [4, 5, 1, 2, 3]
80
+
81
+ useFrom([1, 2, 3, 4, 5])
82
+ .translate(-2) // 要素を2位置左にシフト
83
+ .toOrdered()
84
+ .toArray(); // [3, 4, 5, 1, 2]
85
+
86
+ // 早期終了付きの無限レンジ
87
+ useRange(0n, 1_000_000n)
88
+ .filter(n => n % 17n === 0n)
89
+ .limit(10n) // 10要素で停止
114
90
  .toUnordered()
115
91
  .toArray();
116
92
 
117
- // 10秒間のクリックを収集
118
- const clicksIn10s = await useDocument('click')
119
- .takeWhile((_, index, startTime = Date.now()) => Date.now() - startTime < 10000)
93
+ // リアルタイムウィンドウリサイズ (5イベント後に自動停止)
94
+ useWindow("resize")
95
+ .limit(5n) // イベントストリームでは重要
120
96
  .toUnordered()
121
- .toArray();
97
+ .forEach((ev, idx) => console.log(`リサイズ #${idx}`));
122
98
 
123
- // インデックス2から5(0ベース)のクリックを収集
124
- const specificClicks = await useDocument('click')
125
- .sub(2n, 6n) // <- インデックス2、3、4、5の要素を取得
99
+ // HTML要素のリスニング
100
+ // <input id="input" type="text"/>
101
+ useHTMLElement("#input", "change")
102
+ .limit(1)
126
103
  .toUnordered()
127
- .toArray();
128
- ```
104
+ .forEach((event: Event) => submit(event));
129
105
 
130
- **重要な洞察**: イベント(例:MouseEvent)とその連続的な発火インデックス(bigintとして)は、`accept(event, index)`コールバックを介してパイプラインを通して一緒に渡されます。
106
+ // 複数要素とイベントのリスニング
107
+ useHTMLElement("input", ["change", "keyup"])
108
+ .takeWhile((event: Event): boolean => validate(event))
109
+ .toUnordered()
110
+ .forEach((event: Event) => submit(event));
131
111
 
132
- ### 5. 統計の活用
133
- ```typescript
134
- const numericStream = useFrom([10, 20, 30, 40, 50]).toNumeric();
135
- const average = await numericStream.average();
136
- const median = await numericStream.median();
137
- const standardDeviation = await numericStream.standardDeviation();
138
- const skewness = await numericStream.skewness();
139
- console.log(`平均: ${average}, 中央値: ${median}, 標準偏差: ${standardDeviation}`);
140
- ```
112
+ // WebSocketのリスニング
113
+ let webSocket = new WebSocket("ws://localhost:8080");
114
+ webSocket.addEventListener("close", (): void => {
115
+ webSocket.close(); // WebSocketのライフサイクルは手動で管理
116
+ });
117
+ useWebSocket(webSocket, "message")
118
+ .limit(1)
119
+ .toUnordered()
120
+ .forEach((message: MessageEvent) => console.log(message.data));
141
121
 
142
- ## 主な機能
143
- - **デュアルストリームタイプ**: 同期(Iterable用)と非同期(AsyncIterableとイベント用)の両方のフルサポート
144
- - **豊富な操作セット**: filter, map, flatMap, concat, distinct, sorted, limit, skip, peek, reverse, shuffle
145
- - **柔軟な終端操作**: collect(カスタムコレクタ付き), toArray, toSet, toMap, forEach, reduce, findFirst, anyMatch, allMatch, count
146
- - **高度なコレクタ**: 連結、グループ化、分割、合計、平均、最大値、最小値のための組み込みコレクタ
147
- - **統計モジュール**: 数値/ bigintストリームに対する平均、中央値、最頻値、分散、標準偏差、範囲、分位数、歪度、尖度のためのすぐに使えるメソッド
148
- - **ユーティリティ関数**: 型ガード(isPromise、isAsyncIterable)、コンパレータ(useCompare)、トラバーサル(useTraverse)、変換フック
149
- - **Optional<T>**: null許容値のためのモナディックコンテナ。検索操作と統合されています。
150
-
151
- ## API概要
152
- ### コアクラス&インターフェース
153
- - `Semantic<E>` / `AsynchronousSemantic<E>`: 抽象ストリーム定義
154
- - `Collectable<E>` / `AsynchronousCollectable<E>`: 終端操作を持つ実行可能ストリーム
155
- - `OrderedCollectable<E>` / `UnorderedCollectable<E>`: 順序に敏感または順序に敏感でない操作に最適化された実体化バージョン
156
- - `Collector<E, A, R>`: 可変リダクション操作の抽象化
157
-
158
- ### ファクトリ関数(use*)
159
- - **ソースから**: useFrom, useRange, useFill, useEmpty
160
- - **時間から**: useInterval, useAnimationFrame
161
- - **Web APIから**: useBlob, useDocument, useWindow, useHTMLElement, useWebSocket
162
- - **コレクタ**: useToArray, useGroupBy, useSummate, useJoin など
163
-
164
- ## パフォーマンスに関する注意点
165
- - **遅延評価**: パイプラインは、終端操作が呼び出されるまで実行されずに構成されます
166
- - **短絡評価**: limit、anyMatch、findFirstなどの操作は、結果が決定するとすぐに要素の処理を停止します
167
- - **順序あり vs 順序なし**:
168
- - ソース要素の順序が結果に影響しない終端操作(例:合計、最大値、またはtoSet)の場合、`.toUnordered()`を使用します。これにより、高価なソートステップをスキップする内部最適化が可能になる場合があります
169
- - シーケンスが重要な場合(例:順序を保持する必要があるtoArray)には、`.toOrdered()`を使用します
170
-
171
- ## はじめの一歩の例
172
- ```typescript
173
- import { useFrom, useSummate, useGroupBy } from 'semantic-typescript';
174
-
175
- interface Transaction {
176
- id: number;
177
- amount: number;
178
- category: string;
179
- }
180
-
181
- const transactions: Transaction[] = [
182
- { id: 1, amount: 100, category: 'Food' },
183
- { id: 2, amount: 200, category: 'Electronics' },
184
- { id: 3, amount: 50, category: 'Food' },
185
- { id: 4, amount: 300, category: 'Electronics' },
186
- ];
187
-
188
- // カテゴリごとの合計金額を計算
189
- const totalsByCategory = await useFrom(transactions)
122
+ // 文字列をコードポイントでイテレート
123
+ useText("My emotion now is: 😊, and semantic is 👍")
190
124
  .toUnordered()
191
- .collect(
192
- useGroupBy(
193
- t => t.category,
194
- t => t.amount,
195
- useSummate() // 値のためのコレクタ
196
- )
197
- );
198
-
199
- console.log(totalsByCategory); // Map { 'Food' => 150, 'Electronics' => 500 }
125
+ .log(); // 文字列を出力
126
+
127
+ // 循環参照を含むオブジェクトを安全に文字列化
128
+ let o = {
129
+ a: 1,
130
+ b: "text",
131
+ c: [o.a, o.b, o.c] // 循環参照
132
+ };
133
+ // let text: string = JSON.stringify(o); // エラーをスロー
134
+ let text: string = useStringify(o); // 安全に `{a: 1, b: "text", c: []}` を生成
200
135
  ```
201
136
 
202
- Semantic-TypeScriptは、厳密に設計された、型安全で高性能なストリーム処理ライブラリを求める開発者のために構築されています。これは、エンタープライズレベルのデータ変換パターンの力をTypeScriptエコシステムにもたらし、データ集約型のフロントエンドアプリケーション、Node.jsデータ処理、シーケンスのエレガントで効率的な処理が必要とされるあらゆるシナリオに最適です。
137
+ ---
138
+
139
+ ### コアコンセプト
140
+
141
+ | 概念 | 目的 | 使用する場面 |
142
+ | :--- | :--- | :--- |
143
+ | `AsynchronousSemantic` | 非同期ストリーム、イベント、遅延パイプラインのためのコアビルダー。 | リアルタイムイベント、WebSockets、DOMリスナー、長時間実行または無限ストリーム。 |
144
+ | `SynchronousSemantic` | 同期、インメモリ、ループベースのストリームのビルダー。 | 静的なデータ、レンジ、即時イテレーション。 |
145
+ | `toUnordered()` | 最速の終端コレクター(マップベースのインデックス付け)。 | パフォーマンスが重要なパス(O(n) 時間 & 空間、ソートなし)。 |
146
+ | `toOrdered()` | ソート済み、インデックス安定のコレクター。 | 安定した順序付けまたはインデックス付きアクセスが必要な場合。 |
147
+ | `toNumericStatistics()` | 豊富な数値統計分析(平均、中央値、分散、歪度、尖度など)。 | データ分析と統計計算。 |
148
+ | `toBigIntStatistics()` | 豊富なbigint統計分析。 | 大きな整数に対するデータ分析と統計計算。 |
149
+ | `toWindow()` | スライディングおよびタンブリングウィンドウのサポート。 | 時系列処理、バッチ処理、ウィンドウ操作。 |
150
+
151
+ ---
152
+
153
+ 重要な使用ルール
154
+
155
+ 1. イベントストリーム(`useWindow`、`useDocument`、`useHTMLElement`、`useWebSocket`、…)は `AsynchronousSemantic` を返します。
156
+ → リスニングを停止するには、`.limit(n)`、`.sub(start, end)`、または `.takeWhile()` を呼び出す**必須**です。そうしないと、リスナーはアクティブなままになります。
157
+
158
+ 2. 終端操作(`.toArray()`、`.count()`、`.average()`、`.reduce()`、`.findFirst()` など)は、コレクターに変換した後にのみ利用可能です:
159
+ ```typescript
160
+ .toUnordered() // O(n) 時間 & 空間、ソートなし
161
+ // または
162
+ .toOrdered() // ソート済み、順序を維持
163
+ ```
164
+
165
+ ---
166
+
167
+ ### パフォーマンス特性
168
+
169
+ | コレクター | 時間計算量 | 空間計算量 | ソート済み? | 最適な用途 |
170
+ | :--- | :--- | :--- | :--- | :--- |
171
+ | `toUnordered()` | O(n) | O(n) | いいえ | 生の速度、順序が不要な場合。 |
172
+ | `toOrdered()` | O(2n) | O(n) | はい | 安定した順序付け、インデックス付きアクセス、分析。 |
173
+ | `toNumericStatistics()` | O(2n) | O(n) | はい | ソート済みデータを必要とする統計操作。 |
174
+ | `toBigIntStatistics()` | O(2n) | O(n) | はい | bigintに対する統計操作。 |
175
+ | `toWindow()` | O(2n) | O(n) | はい | 時間ベースのウィンドウ操作。 |
176
+
177
+ 速度が最優先の場合は `toUnordered()` を選択してください。安定した順序付けやソート済みデータに依存する統計メソッドが必要な場合にのみ `toOrdered()` を使用してください。
178
+
179
+ ---
180
+
181
+ 他のフロントエンドストリームプロセッサとの比較
182
+
183
+ | 特徴 | Semantic-TypeScript | RxJS | ネイティブ非同期イテレータ/ジェネレータ | Most.js |
184
+ | :--- | :--- | :--- | :--- | :--- |
185
+ | **TypeScript統合** | 第一級、ネイティブなインデックス認識を伴う深い型付け。 | 優れているが、複雑なジェネリクスを伴う。 | 良好、手動での型付けが必要。 | 強い、関数型ファーストスタイル。 |
186
+ | **組み込み統計分析** | `number` と `bigint` に対する包括的なネイティブサポート。 | ネイティブでは利用不可(カスタムオペレータが必要)。 | なし。 | なし。 |
187
+ | **インデックス付け & 位置認識** | ネイティブ、あらゆる要素に対する強力なbigintインデックス付け。 | カスタムオペレータが必要(`scan`、`withLatestFrom`)。 | 手動のカウンタが必要。 | 基本的、組み込みインデックスなし。 |
188
+ | **イベントストリーム管理** | 明示的な早期停止制御を備えた、専用の型安全ファクトリ。 | 強力だが、手動のサブスクリプション管理が必要。 | 手動イベントリスナー + キャンセル。 | 良好な `fromEvent`、軽量。 |
189
+ | **パフォーマンス & メモリ効率** | 卓越 – 最適化された `toUnordered()` および `toOrdered()` コレクター。 | 非常に良好、だがオペレータチェーンはオーバーヘッドを加える。 | 卓越(オーバーヘッドゼロ)。 | 卓越。 |
190
+ | **バンドルサイズ** | 非常に軽量。 | 大きい(ツリーシェイキング後も)。 | ゼロ(ネイティブ)。 | 小さい。 |
191
+ | **API設計思想** | 明示的なインデックス付けを伴う関数型コレクターパターン。 | リアクティブObservableパターン。 | イテレータ/ジェネレータパターン。 | 関数型、ポイントフリー。 |
192
+ | **早期終了 & 制御** | 明示的(`interrupt`、`.limit()`、`.takeWhile()`、`.sub()`)。 | 良好(`take`、`takeUntil`、`first`)。 | 手動(`for await…of` 内の `break`)。 | 良好(`take`、`until`)。 |
193
+ | **同期 & 非同期サポート** | 統一されたAPI – 両方を第一級サポート。 | 主に非同期。 | 両方、だが手動。 | 主に非同期。 |
194
+ | **学習曲線** | 関数型およびインデックス付きパイプラインに慣れた開発者にとって緩やか。 | 急(多くのオペレータ、hot/coldオブザーバブル)。 | 低い。 | 中程度。 |
195
+
196
+ **Semantic-TypeScriptの主な利点**
197
+
198
+ ・ 独自の組み込み統計およびインデックス機能により、手動での `reduce` や外部ライブラリが不要。
199
+
200
+ ・ イベントストリームに対する明示的な制御により、RxJSで一般的なメモリリークを防止。
201
+
202
+ ・ 統一された同期/非同期設計により、多様なユースケースに対して単一で一貫したAPIを提供。
203
+
204
+ この比較は、伝統的なリアクティブライブラリの煩雑さなしに、パフォーマンス、型安全性、豊富な分析機能を要求するモダンなTypeScriptフロントエンドアプリケーションに、Semantic-TypeScriptが特に適している理由を示しています。
205
+
206
+ ---
207
+
208
+ ### 探求を始めましょうか?
209
+
210
+ Semantic-TypeScriptは、複雑なデータフローを、読みやすく、合成可能で、高性能なパイプラインへと変えます。リアルタイムUIイベントの処理、大規模データセットの処理、分析ダッシュボードの構築のいずれにおいても、データベースレベルのインデックス付けの力を関数型プログラミングのエレガンスと共に提供します。
211
+
212
+ 次のステップ:
213
+
214
+ ・ IDE内で完全に型付けされたAPIを参照してください(すべてのエクスポートはメインパッケージから)。
215
+
216
+ ・ 複雑な非同期イテレータをクリーンなSemanticパイプラインに置き換えた開発者の成長するコミュニティに参加してください。
217
+
218
+ Semantic-TypeScript — ストリームが構造と出会う場所。
219
+
220
+ 今日から構築を始め、考え抜かれたインデックス付けがもたらす違いを体験してください。
203
221
 
204
- [![GitHub](./GitHub.png)](https://github.com/eloyhere/semantic-typescript) [![NPM](./NPM.png)](https://www.npmjs.com/package/semantic-typescript)
222
+ 明確さをもって構築し、確信をもって進み、意図をもってデータを変革しましょう。