semantic-typescript 0.0.1 โ 0.0.3
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/package.json +1 -1
- package/readme.cn.md +335 -0
- package/readme.de.md +335 -0
- package/readme.es.md +335 -0
- package/readme.fr.md +335 -0
- package/readme.jp.md +335 -0
- package/readme.kr.md +335 -0
- package/readme.md +335 -0
- package/readme.tw.md +335 -0
package/readme.jp.md
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# ๐ semantic-typescript
|
|
2
|
+
|
|
3
|
+
TypeScript ใซใใใ**ๆๅณ่ซ็ใชใใผใฟๅฆ็**ใฎใใใฎใๅผทๅใงๅๅฎๅ
จใชใฆใผใใฃใชใใฃใฉใคใใฉใชใงใใ
|
|
4
|
+
ใณใฌใฏใทใงใณใในใใชใผใ ใใทใผใฑใณในใๆฑใใใใฎ้ขๆฐ็ในใฟใคใซใฎๆงๆ่ฆ็ด ใๆไพใใใฝใผใใใใฃใซใฟใชใณใฐใใฐใซใผใๅใ็ตฑ่จๅๆใชใฉใใตใใผใใใพใใ
|
|
5
|
+
|
|
6
|
+
**้ ๅบไปใใพใใฏ้ ๅบใชใใฎใใผใฟ**ใๅฆ็ใใๅ ดๅใงใใ**็ตฑ่จๅๆ**ใ่กใๅ ดๅใงใใๅใซ**ๆผ็ฎใๆตใใใใใซใใงใผใณใใใ**ๅ ดๅใงใใๆฌใฉใคใใฉใชใๅฏพๅฟใใพใใ
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ๐งฉ ็นๅพด
|
|
11
|
+
|
|
12
|
+
- โ
ๅ
จ้ข็ใซ**ๅๅฎๅ
จใชใธใงใใชใฏใน**
|
|
13
|
+
- โ
**้ขๆฐๅใใญใฐใฉใใณใฐ**ในใฟใคใซ๏ผmapใfilterใreduce ใชใฉ๏ผ
|
|
14
|
+
- โ
**ๆๅณ่ซ็ใใผใฟในใใชใผใ **๏ผ`Semantic<E>`๏ผใซใใ้
ๅปถ่ฉไพก
|
|
15
|
+
- โ
ในใใชใผใ ใๅ
ทไฝ็ใชๆง้ ใซๅคๆใใใใใฎ**ใณใฌใฏใฟใผ**
|
|
16
|
+
- โ
**้ ๅบไปใ๏ผ้ ๅบใชใใณใฌใฏใทใงใณ** โ `toUnordered()` ใฏ**ๆ้**๏ผใฝใผใใชใ๏ผ
|
|
17
|
+
- โ
`sorted()`ใ`toOrdered()`ใๆฏ่ผๅจใซใใ**ใฝใผใๆฉ่ฝ**
|
|
18
|
+
- โ
**็ตฑ่จๅๆ**๏ผ`Statistics`ใ`NumericStatistics`ใ`BigIntStatistics`๏ผ
|
|
19
|
+
- โ
ๅฎๅ
จใช null ๅคๅฆ็ใฎใใใฎ **`Optional<T>` ใขใใ**
|
|
20
|
+
- โ
**ใคใใฌใผใฟใจใธใงใใฌใผใฟใผ**ใใผในใฎ่จญ่จ โ ๅคง่ฆๆจกใป้ๅๆใใผใฟใซใ้ฉๅฟ
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## ๐ฆ ใคใณในใใผใซ
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install semantic-typescript
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ๐ง ใณใขๆฆๅฟต
|
|
33
|
+
|
|
34
|
+
### 1. `Optional<T>` โ ๅฎๅ
จใช null ๅคๅฆ็
|
|
35
|
+
|
|
36
|
+
`null` ใพใใฏ `undefined` ใซใชใๅพใๅคใๆ ผ็ดใใใขใใใฃใใฏใณใณใใใงใใ
|
|
37
|
+
|
|
38
|
+
#### ใกใฝใใ๏ผ
|
|
39
|
+
|
|
40
|
+
| ใกใฝใใ | ่ชฌๆ | ไพ |
|
|
41
|
+
|----------|------|-----|
|
|
42
|
+
| `of(value)` | ๅคใใฉใใ๏ผnullish ใๅฏ๏ผ | `Optional.of(null)` |
|
|
43
|
+
| `ofNullable(v)` | ใฉใใ๏ผnullish ใ่จฑๅฎน๏ผ | `Optional.ofNullable(someVar)` |
|
|
44
|
+
| `ofNonNull(v)` | ใฉใใ๏ผnull/undefined ใชใไพๅค๏ผ | `Optional.ofNonNull(5)` |
|
|
45
|
+
| `get()` | ๅคใๅๅพ๏ผ็ฉบใชใไพๅค๏ผ | `opt.get()` |
|
|
46
|
+
| `getOrDefault(d)` | ๅคใๅๅพใ็ฉบใชใใใใฉใซใๅค | `opt.getOrDefault(0)` |
|
|
47
|
+
| `ifPresent(fn)` | ๅคใใใใฐๅฏไฝ็จใๅฎ่ก | `opt.ifPresent(x => console.log(x))` |
|
|
48
|
+
| `map(fn)` | ๅคใใใใฐๅคๆ | `opt.map(x => x + 1)` |
|
|
49
|
+
| `filter(fn)` | ่ฟฐ่ชใๆบใใๅ ดๅใฎใฟๅคใไฟๆ | `opt.filter(x => x > 0)` |
|
|
50
|
+
| `isEmpty()` | ็ฉบใใฉใใใ็ขบ่ช | `opt.isEmpty()` |
|
|
51
|
+
| `isPresent()` | ๅคใๆใคใใฉใใใ็ขบ่ช | `opt.isPresent()` |
|
|
52
|
+
|
|
53
|
+
#### ไพ๏ผ
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { Optional } from 'semantic-typescript';
|
|
57
|
+
|
|
58
|
+
const value: number | null = Math.random() > 0.5 ? 10 : null;
|
|
59
|
+
|
|
60
|
+
const opt = Optional.ofNullable(value);
|
|
61
|
+
|
|
62
|
+
const result = opt
|
|
63
|
+
.filter(v => v > 5)
|
|
64
|
+
.map(v => v * 2)
|
|
65
|
+
.getOrDefault(0);
|
|
66
|
+
|
|
67
|
+
console.log(result); // 20 ใพใใฏ 0
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 2. `Semantic<E>` โ ้
ๅปถใใผใฟในใใชใผใ
|
|
73
|
+
|
|
74
|
+
่ฆ็ด ใฎ**้
ๅปถ่ฉไพกๅฏ่ฝใชๅๆๅฏ่ฝใทใผใฑใณใน**ใงใใJava Streams ใ Kotlin Sequences ใฎใใใช้ขๆฐ็ในใใชใผใ ใซไผผใฆใใพใใ
|
|
75
|
+
|
|
76
|
+
`from()`ใ`range()`ใ`iterate()`ใ`fill()` ใชใฉใฎใใซใใผใง `Semantic` ใไฝๆใงใใพใใ
|
|
77
|
+
|
|
78
|
+
#### ไฝๆใกใฝใใ๏ผ
|
|
79
|
+
|
|
80
|
+
| ้ขๆฐ | ่ชฌๆ | ไพ |
|
|
81
|
+
|------|------|-----|
|
|
82
|
+
| `from(iterable)` | Array/Set/Iterable ใใไฝๆ | `from([1, 2, 3])` |
|
|
83
|
+
| `range(start, end, step?)` | ๆฐๅค็ฏๅฒใ็ๆ | `range(0, 5)` โ 0,1,2,3,4 |
|
|
84
|
+
| `fill(element, count)` | ่ฆ็ด ใ N ๅ็นฐใ่ฟใ | `fill('a', 3n)` |
|
|
85
|
+
| `iterate(gen)` | ใซในใฟใ ใธใงใใฌใผใฟใผ้ขๆฐใไฝฟ็จ | `iterate(genFn)` |
|
|
86
|
+
|
|
87
|
+
#### ไธปใชๆผ็ฎๅญ๏ผ
|
|
88
|
+
|
|
89
|
+
| ใกใฝใใ | ่ชฌๆ | ไพ |
|
|
90
|
+
|----------|------|-----|
|
|
91
|
+
| `map(fn)` | ๅ่ฆ็ด ใๅคๆ | `.map(x => x * 2)` |
|
|
92
|
+
| `filter(fn)` | ่ฟฐ่ชใๆบใใ่ฆ็ด ใไฟๆ | `.filter(x => x > 10)` |
|
|
93
|
+
| `limit(n)` | ๆๅใฎ N ่ฆ็ด ใซๅถ้ | `.limit(5)` |
|
|
94
|
+
| `skip(n)` | ๆๅใฎ N ่ฆ็ด ใในใญใใ | `.skip(2)` |
|
|
95
|
+
| `distinct()` | ้่คใ้คๅป๏ผใใใฉใซใใง Set ใไฝฟ็จ๏ผ | `.distinct()` |
|
|
96
|
+
| `sorted()` | ่ฆ็ด ใใฝใผใ๏ผ่ช็ถ้ ๏ผ | `.sorted()` |
|
|
97
|
+
| `sorted(comparator)` | ใซในใฟใ ใฝใผใ | `.sorted((a, b) => a - b)` |
|
|
98
|
+
| `toOrdered()` | ใฝใผใใใฆ `OrderedCollectable` ใ่ฟใ | `.toOrdered()` |
|
|
99
|
+
| `toUnordered()` | **ใฝใผใใชใ** โ ๆ้ใฎใณใฌใฏใทใงใณ | `.toUnordered()` โ
|
|
|
100
|
+
| `collect(collector)` | ใณใฌใฏใฟใผใง้็ด | `.collect(Collector.full(...))` |
|
|
101
|
+
| `toArray()` | ้
ๅใซๅคๆ | `.toArray()` |
|
|
102
|
+
| `toSet()` | Set ใซๅคๆ | `.toSet()` |
|
|
103
|
+
| `toMap(keyFn, valFn)` | Map ใซๅคๆ | `.toMap(x => x.id, x => x)` |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 3. `toUnordered()` โ ๐ ๆ้ใใฝใผใใชใ
|
|
108
|
+
|
|
109
|
+
**้ ๅบใๅฟ
่ฆใจใใ**ใ**ๆ้ซใฎใใใฉใผใใณใน**ใๆฑใใๅ ดๅใฏใไปฅไธใไฝฟ็จใใฆใใ ใใ๏ผ
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
const fastest = semanticStream.toUnordered();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
๐ฅ **ใฝใผใใขใซใดใชใบใ ใฏ้ฉ็จใใใพใใใ**
|
|
116
|
+
้ ๅบใ้ขไฟใชใใๆๅคงใฎ้ๅบฆใๅฟ
่ฆใชๅ ดๅใซ็ๆณ็ใงใใ
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 4. `toOrdered()` ใใใณ `sorted()` โ ใฝใผใๆธใฟๅบๅ
|
|
121
|
+
|
|
122
|
+
**ใฝใผใๆธใฟๅบๅ**ใๅฟ
่ฆใชๅ ดๅใฏใไปฅไธใไฝฟ็จใใฆใใ ใใ๏ผ
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
const ordered = semanticStream.sorted(); // ่ช็ถ้
|
|
126
|
+
const customSorted = semanticStream.sorted((a, b) => a - b); // ใซในใฟใ ๆฏ่ผๅจ
|
|
127
|
+
const orderedCollectable = semanticStream.toOrdered(); // ใใกใใใฝใผใ
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
โ ๏ธ ใใใใฎใกใฝใใใฏใ่ช็ถ้ ใพใใฏๆๅฎใใใๆฏ่ผๅจใไฝฟ็จใใฆ่ฆ็ด ใ**ใฝใผใใใพใ**ใ
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### 5. `Collector<E, A, R>` โ ใใผใฟ้็ด
|
|
135
|
+
|
|
136
|
+
ใณใฌใฏใฟใผใซใใใในใใชใผใ ใ**ๅไธใพใใฏ่ค้ใชๆง้ ใซ็ธฎ็ด**ใงใใพใใ
|
|
137
|
+
|
|
138
|
+
็ตใฟ่พผใฟใฎ้็ใใกใฏใใชใผ๏ผ
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
Collector.full(identity, accumulator, finisher)
|
|
142
|
+
Collector.shortable(identity, interruptor, accumulator, finisher)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
้ๅธธใ`Collectable` ใฏใฉในใฎ้ซๆฐดๆบใใซใใผใ้ใใฆไฝฟ็จใใใพใใ
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### 6. `Collectable<E>`๏ผๆฝ่ฑกใฏใฉใน๏ผ
|
|
150
|
+
|
|
151
|
+
ไปฅไธใฎใฏใฉในใฎๅบๅบใฏใฉในใงใ๏ผ
|
|
152
|
+
|
|
153
|
+
- `OrderedCollectable<E>` โ ใฝใผใๆธใฟๅบๅ
|
|
154
|
+
- `UnorderedCollectable<E>` โ ใฝใผใใชใใๆ้
|
|
155
|
+
- `WindowCollectable<E>` โ ในใฉใคใใฃใณใฐใฆใฃใณใใฆ
|
|
156
|
+
- `Statistics<E, D>` โ ็ตฑ่จ้็ด
|
|
157
|
+
|
|
158
|
+
#### ๅ
ฑ้ใกใฝใใ๏ผ็ถๆฟ็ต็ฑ๏ผ๏ผ
|
|
159
|
+
|
|
160
|
+
| ใกใฝใใ | ่ชฌๆ | ไพ |
|
|
161
|
+
|----------|------|-----|
|
|
162
|
+
| `count()` | ่ฆ็ด ใใซใฆใณใ | `.count()` |
|
|
163
|
+
| `toArray()` | ้
ๅใซๅคๆ | `.toArray()` |
|
|
164
|
+
| `toSet()` | Set ใซๅคๆ | `.toSet()` |
|
|
165
|
+
| `toMap(k, v)` | Map ใซๅคๆ | `.toMap(x => x.id, x => x)` |
|
|
166
|
+
| `group(k)` | ใญใผใงใฐใซใผใๅ | `.group(x => x.category)` |
|
|
167
|
+
| `findAny()` | ไปปๆใฎไธ่ด่ฆ็ด ๏ผOptional๏ผ | `.findAny()` |
|
|
168
|
+
| `findFirst()` | ๆๅใฎ่ฆ็ด ๏ผOptional๏ผ | `.findFirst()` |
|
|
169
|
+
| `reduce(...)` | ใซในใฟใ ็ธฎ็ด | `.reduce((a,b) => a + b, 0)` |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### 7. `OrderedCollectable<E>` โ ใฝใผใๆธใฟใใผใฟ
|
|
174
|
+
|
|
175
|
+
่ฆ็ด ใ**่ชๅ็ใซใฝใผใ**ใใใๅ ดๅใฏใใใฎใฏใฉในใไฝฟ็จใใฆใใ ใใใ
|
|
176
|
+
|
|
177
|
+
**ใซในใฟใ ๆฏ่ผๅจ**ใๅใๅ
ฅใใใใ่ช็ถ้ ใไฝฟ็จใใพใใ
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const sorted = new OrderedCollectable(stream);
|
|
181
|
+
const customSorted = new OrderedCollectable(stream, (a, b) => b - a);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
๐ **ใฝใผใๆธใฟๅบๅใไฟ่จผใใใพใใ**
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### 8. `UnorderedCollectable<E>` โ ใฝใผใใชใ๏ผ๐ ๆ้๏ผ
|
|
189
|
+
|
|
190
|
+
**้ ๅบใๅฟ
่ฆใจใใ**ใ**ๆ้ซใฎใใใฉใผใใณใน**ใๆฑใใๅ ดๅใฏใไปฅไธใไฝฟ็จใใฆใใ ใใ๏ผ
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
const unordered = new UnorderedCollectable(stream);
|
|
194
|
+
// ใพใใฏ
|
|
195
|
+
const fastest = semanticStream.toUnordered();
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
โ
**ใฝใผใใขใซใดใชใบใ ใฏๅฎ่กใใใพใใ**
|
|
199
|
+
โ
**้ ๅบใ็ก้ขไฟใชๅ ดๅใฎๆ้ซใใใฉใผใใณใน**
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### 9. `Statistics<E, D>` โ ็ตฑ่จๅๆ
|
|
204
|
+
|
|
205
|
+
ๆฐๅคใใผใฟใๅๆใใใใใฎๆฝ่ฑกๅบๅบใฏใฉในใงใใ
|
|
206
|
+
|
|
207
|
+
#### ใตใใฏใฉใน๏ผ
|
|
208
|
+
|
|
209
|
+
- `NumericStatistics<E>` โ `number` ๅ็จ
|
|
210
|
+
- `BigIntStatistics<E>` โ `bigint` ๅ็จ
|
|
211
|
+
|
|
212
|
+
##### ไธปใช็ตฑ่จใกใฝใใ๏ผ
|
|
213
|
+
|
|
214
|
+
| ใกใฝใใ | ่ชฌๆ | ไพ |
|
|
215
|
+
|----------|------|-----|
|
|
216
|
+
| `mean()` | ็ฎ่กๅนณๅ | `.mean()` |
|
|
217
|
+
| `median()` | ไธญๅคฎๅค | `.median()` |
|
|
218
|
+
| `mode()` | ๆ้ ปๅค | `.mode()` |
|
|
219
|
+
| `minimum()` | ๆๅฐ่ฆ็ด | `.minimum()` |
|
|
220
|
+
| `maximum()` | ๆๅคง่ฆ็ด | `.maximum()` |
|
|
221
|
+
| `range()` | ๆๅคง โ ๆๅฐ | `.range()` |
|
|
222
|
+
| `variance()` | ๅๆฃ | `.variance()` |
|
|
223
|
+
| `standardDeviation()` | ๆจๆบๅๅทฎ | `.standardDeviation()` |
|
|
224
|
+
| `summate()` | ่ฆ็ด ใฎๅ่จ | `.summate()` |
|
|
225
|
+
| `quantile(q)` | q ใใผใปใณใฟใคใซ๏ผ0โ1๏ผใฎๅค | `.quantile(0.5)` โ ไธญๅคฎๅค |
|
|
226
|
+
| `frequency()` | ้ ปๅบฆใใใ | `.frequency()` |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## ๐งช ๅฎๅ
จใชไพ
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { from, toUnordered, toOrdered, sorted, NumericStatistics } from 'semantic-typescript';
|
|
234
|
+
|
|
235
|
+
// ใตใณใใซใใผใฟ
|
|
236
|
+
const numbers = from([10, 2, 8, 4, 5, 6]);
|
|
237
|
+
|
|
238
|
+
// ๐ ๆ้๏ผใฝใผใใชใ
|
|
239
|
+
const fastest = numbers.toUnordered();
|
|
240
|
+
console.log(fastest.toArray()); // ไพ: [10, 2, 8, 4, 5, 6]๏ผๅ
ใฎ้ ๅบ๏ผ
|
|
241
|
+
|
|
242
|
+
// ๐ข ่ช็ถ้ ใงใฝใผใ
|
|
243
|
+
const ordered = numbers.sorted();
|
|
244
|
+
console.log(ordered.toArray()); // [2, 4, 5, 6, 8, 10]
|
|
245
|
+
|
|
246
|
+
// ๐ ็ตฑ่จๅๆใๅฎ่ก
|
|
247
|
+
const stats = new NumericStatistics(numbers);
|
|
248
|
+
console.log('ๅนณๅ:', stats.mean());
|
|
249
|
+
console.log('ไธญๅคฎๅค:', stats.median());
|
|
250
|
+
console.log('ๆ้ ปๅค:', stats.mode());
|
|
251
|
+
console.log('็ฏๅฒ:', stats.range());
|
|
252
|
+
console.log('ๆจๆบๅๅทฎ:', stats.standardDeviation());
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## ๐ ๏ธ ใฆใผใใฃใชใใฃ้ขๆฐ
|
|
258
|
+
|
|
259
|
+
ๆฌใฉใคใใฉใชใฏๅคๆฐใฎ**ๅใฌใผใ**ใจ**ๆฏ่ผใฆใผใใฃใชใใฃ**ใใจใฏในใใผใใใฆใใพใ๏ผ
|
|
260
|
+
|
|
261
|
+
| ้ขๆฐ | ็จ้ |
|
|
262
|
+
|------|------|
|
|
263
|
+
| `isString(x)` | `string` ใฎๅใฌใผใ |
|
|
264
|
+
| `isNumber(x)` | `number` ใฎๅใฌใผใ |
|
|
265
|
+
| `isBoolean(x)` | `boolean` ใฎๅใฌใผใ |
|
|
266
|
+
| `isIterable(x)` | ใชใใธใงใฏใใใคใใฉใใซใ็ขบ่ช |
|
|
267
|
+
| `useCompare(a, b)` | ๆฑ็จๆฏ่ผ้ขๆฐ |
|
|
268
|
+
| `useRandom(x)` | ็ไผผไนฑๆฐใธใงใใฌใผใฟใผ๏ผๆฅฝใใ๏ผ |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## ๐งฉ ็บๅฑ๏ผใซในใฟใ ใธใงใใฌใผใฟใผใจใฆใฃใณใใฆ
|
|
273
|
+
|
|
274
|
+
็ก้ใพใใฏๅถๅพกใใใใใผใฟในใใชใผใ ็จใฎใซในใฟใ **ใธใงใใฌใผใฟใผ**ใไฝๆใงใใพใ๏ผ
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
const gen = (accept: BiConsumer<number, bigint>, interrupt: Predicate<number>) => {
|
|
278
|
+
for (let i = 0; i < 10; i++) {
|
|
279
|
+
accept(i, BigInt(i));
|
|
280
|
+
if (i === 5) interrupt(i);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const s = new Semantic(gen);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
ใพใใฏ**ในใฉใคใใฃใณใฐใฆใฃใณใใฆ**ใไฝฟ็จ๏ผ
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
const windowed = ordered.slide(3n, 2n); // ใตใคใบ 3ใในใใใ 2 ใฎใฆใฃใณใใฆ
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## ๐ ใฉใคใปใณใน
|
|
296
|
+
|
|
297
|
+
ๆฌใใญใธใงใฏใใฏ **MIT ใฉใคใปใณใน**ใฎไธใงๅ
ฌ้ใใใฆใใใๅ็จใใใณๅไบบ็ๅฉ็จใ่ช็ฑใงใใ
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## ๐ ่ฒข็ฎ
|
|
302
|
+
|
|
303
|
+
ใใซใชใฏใจในใใใคใทใฅใผใๆๆกใๆญ่ฟใใพใ๏ผ
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## ๐ ใฏใคใใฏในใฟใผใๆฆ่ฆ
|
|
308
|
+
|
|
309
|
+
| ใฟในใฏ | ใกใฝใใ |
|
|
310
|
+
|-------|----------|
|
|
311
|
+
| null ใๅฎๅ
จใซๅฆ็ | `Optional<T>` |
|
|
312
|
+
| ในใใชใผใ ใไฝๆ | `from([...])`ใ`range()`ใ`fill()` |
|
|
313
|
+
| ใใผใฟใๅคๆ | `map()`ใ`filter()` |
|
|
314
|
+
| ใใผใฟใใฝใผใ | `sorted()`ใ`toOrdered()` |
|
|
315
|
+
| ใฝใผใใชใ๏ผๆ้๏ผ | `toUnordered()` โ
|
|
|
316
|
+
| ใฐใซใผใๅ๏ผ้็ด | `toMap()`ใ`group()`ใ`Collector` |
|
|
317
|
+
| ็ตฑ่จ | `NumericStatistics`ใ`mean()`ใ`median()` ใชใฉ |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## ๐ ใชใณใฏ
|
|
322
|
+
|
|
323
|
+
- ๐ฆ npm: https://www.npmjs.com/package/semantic-typescript
|
|
324
|
+
- ๐ GitHub: https://github.com/eloyhere/semantic-typescript
|
|
325
|
+
- ๐ ใใญใฅใกใณใ: ใฝใผในใณใผใ๏ผๅๅฎ็พฉใๅ็
ง
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
**TypeScript ใงใฎๅๆๅฏ่ฝใงๅๅฎๅ
จใ้ขๆฐ็ใชใใผใฟๅฆ็ใใๆฅฝใใฟใใ ใใใ** ๐
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
โ
**่ฆใใฆใใใฆใใ ใใ๏ผ**
|
|
334
|
+
- `toUnordered()` โ **ใฝใผใใชใใๆ้**
|
|
335
|
+
- ใใฎไปใในใฆ๏ผไพ: `sorted()`ใ`toOrdered()`๏ผโ **ใใผใฟใใฝใผใ**
|
package/readme.kr.md
ADDED
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
# ๐ semantic-typescript
|
|
2
|
+
|
|
3
|
+
TypeScript์์ **์๋ฏธ๋ก ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ(Semantic Data Processing)** ๋ฅผ ์ํ ๊ฐ๋ ฅํ๊ณ ํ์
์์ ํ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
|
|
4
|
+
์ปฌ๋ ์
, ์คํธ๋ฆผ, ์ํ์ค๋ฅผ ํจ์ํ ์คํ์ผ๋ก ๋ค๋ฃฐ ์ ์๋ ๊ตฌ์ฑ ์์๋ค์ ์ ๊ณตํ๋ฉฐ, ์ ๋ ฌ, ํํฐ๋ง, ๊ทธ๋ฃนํ, ํต๊ณ ๋ถ์ ๋ฑ์ ์ง์ํฉ๋๋ค.
|
|
5
|
+
|
|
6
|
+
**์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ๋ **, **ํต๊ณ ๋ถ์์ ํ๋ **, ํน์ ๋จ์ํ **์ฐ์ฐ์ ์ ์ฐฝํ๊ฒ ์ฐ๊ฒฐ(chain)ํ๊ณ ์ถ๋ **, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์๋๋ฆฝ๋๋ค.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ๐งฉ ์ฃผ์ ๊ธฐ๋ฅ
|
|
11
|
+
|
|
12
|
+
- โ
์ ์ฒด์ ์ผ๋ก **ํ์
์์ ํ ์ ๋ค๋ฆญ(Type-safe Generics)**
|
|
13
|
+
- โ
**ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ** (map, filter, reduce ๋ฑ)
|
|
14
|
+
- โ
**์๋ฏธ๋ก ์ ๋ฐ์ดํฐ ์คํธ๋ฆผ(Semantic<E>)** - ์ง์ฐ ํ๊ฐ(Lazy Evaluation) ์ง์
|
|
15
|
+
- โ
์คํธ๋ฆผ์ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ **์ปฌ๋ ํฐ(Collectors)**
|
|
16
|
+
- โ
**์ ๋ ฌ๋(Sorted) ๋ฐ ๋น์ ๋ ฌ๋(Unordered) ์ปฌ๋ ํฐ** โ `toUnordered()`๋ **๊ฐ์ฅ ๋น ๋ฅด๋ฉฐ ์ ๋ ฌํ์ง ์์**
|
|
17
|
+
- โ
`sorted()`, `toOrdered()`, ๋น๊ต์(Comparator)๋ฅผ ํตํ **์ ๋ ฌ ๊ธฐ๋ฅ**
|
|
18
|
+
- โ
**ํต๊ณ ๋ถ์(Statistics)** (`NumericStatistics`, `BigIntStatistics` ๋ฑ)
|
|
19
|
+
- โ
**Optional<T>** โ null ๋๋ undefined ๊ฐ์ ์์ ํ๊ฒ ๋ค๋ฃจ๋ ๋ชจ๋๋(Monad)
|
|
20
|
+
- โ
**๋ฐ๋ณต์(Iterator) & ์์ฑ๊ธฐ(Generator)** ๊ธฐ๋ฐ ์ค๊ณ โ ๋๊ท๋ชจ ๋๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ์๋ ์ ํฉ
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## ๐ฆ ์ค์น
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install semantic-typescript
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ๐ง ํต์ฌ ๊ฐ๋
|
|
33
|
+
|
|
34
|
+
### 1. `Optional<T>` โ null/undefined ๊ฐ ์์ ํ๊ฒ ์ฒ๋ฆฌ
|
|
35
|
+
|
|
36
|
+
๊ฐ์ด null ๋๋ undefined ์ผ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ชจ๋๋(Monadic) ์ปจํ
์ด๋์
๋๋ค.
|
|
37
|
+
|
|
38
|
+
#### ๋ฉ์๋:
|
|
39
|
+
|
|
40
|
+
| ๋ฉ์๋ | ์ค๋ช
| ์์ |
|
|
41
|
+
|--------|------|------|
|
|
42
|
+
| `of(value)` | ๊ฐ ๊ฐ์ธ๊ธฐ (null ๊ฐ๋ฅ) | `Optional.of(null)` |
|
|
43
|
+
| `ofNullable(v)` | null ํ์ฉํ์ฌ ๊ฐ์ธ๊ธฐ | `Optional.ofNullable(someVar)` |
|
|
44
|
+
| `ofNonNull(v)` | null์ด๋ฉด ์์ธ ๋ฐ์ | `Optional.ofNonNull(5)` |
|
|
45
|
+
| `get()` | ๊ฐ ๊ฐ์ ธ์ค๊ธฐ (์์ผ๋ฉด ์์ธ) | `opt.get()` |
|
|
46
|
+
| `getOrDefault(d)` | ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๋๋ ๊ธฐ๋ณธ๊ฐ | `opt.getOrDefault(0)` |
|
|
47
|
+
| `ifPresent(fn)` | ๊ฐ์ด ์์ผ๋ฉด ๋ถ์์ฉ ์คํ | `opt.ifPresent(x => console.log(x))` |
|
|
48
|
+
| `map(fn)` | ๊ฐ์ด ์์ผ๋ฉด ๋ณํ | `opt.map(x => x + 1)` |
|
|
49
|
+
| `filter(fn)` | ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ๋ง ์ ์ง | `opt.filter(x => x > 0)` |
|
|
50
|
+
| `isEmpty()` | ๋น์ด์๋์ง ํ์ธ | `opt.isEmpty()` |
|
|
51
|
+
| `isPresent()` | ๊ฐ์ด ์๋์ง ํ์ธ | `opt.isPresent()` |
|
|
52
|
+
|
|
53
|
+
#### ์์ :
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { Optional } from 'semantic-typescript';
|
|
57
|
+
|
|
58
|
+
const value: number | null = Math.random() > 0.5 ? 10 : null;
|
|
59
|
+
|
|
60
|
+
const opt = Optional.ofNullable(value);
|
|
61
|
+
|
|
62
|
+
const result = opt
|
|
63
|
+
.filter(v => v > 5)
|
|
64
|
+
.map(v => v * 2)
|
|
65
|
+
.getOrDefault(0);
|
|
66
|
+
|
|
67
|
+
console.log(result); // 20 ๋๋ 0
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
### 2. `Semantic<E>` โ ์ง์ฐ ํ๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ
|
|
73
|
+
|
|
74
|
+
์์๋ค์ **์ง์ฐ ํ๊ฐ(Lazy), ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ํ์ค**์
๋๋ค. Java์ Streams๋ Kotlin์ Sequences์ ์ ์ฌํฉ๋๋ค.
|
|
75
|
+
|
|
76
|
+
`from()`, `range()`, `iterate()`, `fill()` ๊ฐ์ ํฌํผ ํจ์๋ก `Semantic` ์คํธ๋ฆผ์ ์์ฑํ ์ ์์ต๋๋ค.
|
|
77
|
+
|
|
78
|
+
#### ์์ฑ ๋ฐฉ๋ฒ:
|
|
79
|
+
|
|
80
|
+
| ํจ์ | ์ค๋ช
| ์์ |
|
|
81
|
+
|------|------|------|
|
|
82
|
+
| `from(iterable)` | ๋ฐฐ์ด, Set, ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก๋ถํฐ ์์ฑ | `from([1, 2, 3])` |
|
|
83
|
+
| `range(start, end, step?)` | ์ซ์ ๋ฒ์ ์์ฑ | `range(0, 5)` โ 0,1,2,3,4 |
|
|
84
|
+
| `fill(element, count)` | ์์๋ฅผ N๋ฒ ๋ฐ๋ณต | `fill('a', 3n)` |
|
|
85
|
+
| `iterate(gen)` | ์ฌ์ฉ์ ์ ์ ์์ฑ๊ธฐ ํจ์ ์ฌ์ฉ | `iterate(genFn)` |
|
|
86
|
+
|
|
87
|
+
#### ์ฃผ์ ์ฐ์ฐ์:
|
|
88
|
+
|
|
89
|
+
| ๋ฉ์๋ | ์ค๋ช
| ์์ |
|
|
90
|
+
|--------|------|------|
|
|
91
|
+
| `map(fn)` | ๊ฐ ์์ ๋ณํ | `.map(x => x * 2)` |
|
|
92
|
+
| `filter(fn)` | ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ง ์ ์ง | `.filter(x => x > 10)` |
|
|
93
|
+
| `limit(n)` | ์ฒ์ N๊ฐ ์์๋ก ์ ํ | `.limit(5)` |
|
|
94
|
+
| `skip(n)` | ์ฒ์ N๊ฐ ์์ ๊ฑด๋๋ฐ๊ธฐ | `.skip(2)` |
|
|
95
|
+
| `distinct()` | ์ค๋ณต ์ ๊ฑฐ (๊ธฐ๋ณธ์ ์ผ๋ก Set ์ฌ์ฉ) | `.distinct()` |
|
|
96
|
+
| `sorted()` | ์์ ์ ๋ ฌ (์์ฐ ์์) | `.sorted()` |
|
|
97
|
+
| `sorted(comparator)` | ์ปค์คํ
์ ๋ ฌ | `.sorted((a, b) => a - b)` |
|
|
98
|
+
| `toOrdered()` | ์ ๋ ฌ ํ `OrderedCollectable` ๋ฐํ | `.toOrdered()` |
|
|
99
|
+
| `toUnordered()` | **์ ๋ ฌ ์์ โ ๊ฐ์ฅ ๋น ๋ฆ** | `.toUnordered()` โ
|
|
|
100
|
+
| `collect(collector)` | ์ปฌ๋ ํฐ๋ก ์ง๊ณ | `.collect(Collector.full(...))` |
|
|
101
|
+
| `toArray()` | ๋ฐฐ์ด๋ก ๋ณํ | `.toArray()` |
|
|
102
|
+
| `toSet()` | Set์ผ๋ก ๋ณํ | `.toSet()` |
|
|
103
|
+
| `toMap(keyFn, valFn)` | Map์ผ๋ก ๋ณํ | `.toMap(x => x.id, x => x)` |
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 3. `toUnordered()` โ ๐ ๊ฐ์ฅ ๋น ๋ฆ, ์ ๋ ฌ ์์
|
|
108
|
+
|
|
109
|
+
**์ ๋ ฌ์ด ํ์ ์๊ณ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ํ๋ค๋ฉด** ์๋์ ๊ฐ์ด ์ฌ์ฉํ์ธ์:
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
const fastest = semanticStream.toUnordered();
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
๐ฅ **์ด๋ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ ์ ์ฉ๋์ง ์์ต๋๋ค.**
|
|
116
|
+
์์๊ฐ ์ค์ํ์ง ์๊ณ ์๋๊ฐ ์ต์ฐ์ ์ผ ๋ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ธ์.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 4. `toOrdered()` ๋ฐ `sorted()` โ ์ ๋ ฌ๋ ์ถ๋ ฅ
|
|
121
|
+
|
|
122
|
+
**์ ๋ ฌ๋ ๊ฒฐ๊ณผ๊ฐ ํ์ํ ๊ฒฝ์ฐ** ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
const ordered = semanticStream.sorted(); // ์์ฐ ์ ๋ ฌ
|
|
126
|
+
const customSorted = semanticStream.sorted((a, b) => a - b); // ์ปค์คํ
๋น๊ต์
|
|
127
|
+
const orderedCollectable = semanticStream.toOrdered(); // ์ ๋ ฌ๋จ
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
โ ๏ธ ์ด ๋ฉ์๋๋ค์ **์์๋ฅผ ์ ๋ ฌ**ํ๋ฉฐ, ์์ฐ ์ ๋ ฌ ๋๋ ์ ๊ณต๋ ๋น๊ต์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### 5. `Collector<E, A, R>` โ ๋ฐ์ดํฐ ์ง๊ณ
|
|
135
|
+
|
|
136
|
+
์ปฌ๋ ํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํธ๋ฆผ์ **๋จ์ผ ๊ฐ ๋๋ ๋ณต์กํ ๊ตฌ์กฐ๋ก ์ถ์ฝ**ํ ์ ์์ต๋๋ค.
|
|
137
|
+
|
|
138
|
+
๋ด์ฅ๋ ์ ์ ํฉํ ๋ฆฌ:
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
Collector.full(identity, accumulator, finisher)
|
|
142
|
+
Collector.shortable(identity, interruptor, accumulator, finisher)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
ํ์ง๋ง ๋ณดํต์ `Collectable` ํด๋์ค์ ๊ณ ์์ค ๋ฉ์๋๋ฅผ ํตํด ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค.
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### 6. `Collectable<E>` (์ถ์ ํด๋์ค)
|
|
150
|
+
|
|
151
|
+
๋ค์ ํด๋์ค๋ค์ ๊ธฐ๋ฐ ํด๋์ค์
๋๋ค:
|
|
152
|
+
|
|
153
|
+
- `OrderedCollectable<E>` โ ์ ๋ ฌ๋ ์ถ๋ ฅ
|
|
154
|
+
- `UnorderedCollectable<E>` โ ์ ๋ ฌ ์์, ๊ฐ์ฅ ๋น ๋ฆ
|
|
155
|
+
- `WindowCollectable<E>` โ ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
|
|
156
|
+
- `Statistics<E, D>` โ ํต๊ณ ์ง๊ณ
|
|
157
|
+
|
|
158
|
+
#### ๊ณตํต ๋ฉ์๋ (์์์ ํตํด):
|
|
159
|
+
|
|
160
|
+
| ๋ฉ์๋ | ์ค๋ช
| ์์ |
|
|
161
|
+
|--------|------|------|
|
|
162
|
+
| `count()` | ์์ ๊ฐ์ | `.count()` |
|
|
163
|
+
| `toArray()` | ๋ฐฐ์ด๋ก ๋ณํ | `.toArray()` |
|
|
164
|
+
| `toSet()` | Set์ผ๋ก ๋ณํ | `.toSet()` |
|
|
165
|
+
| `toMap(k, v)` | Map์ผ๋ก ๋ณํ | `.toMap(x => x.id, x => x)` |
|
|
166
|
+
| `group(k)` | ํค๋ก ๊ทธ๋ฃนํ | `.group(x => x.category)` |
|
|
167
|
+
| `findAny()` | ์์์ ์์ (Optional) | `.findAny()` |
|
|
168
|
+
| `findFirst()` | ์ฒซ ๋ฒ์งธ ์์ (Optional) | `.findFirst()` |
|
|
169
|
+
| `reduce(...)` | ์ปค์คํ
์ถ์ฝ | `.reduce((a,b) => a + b, 0)` |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### 7. `OrderedCollectable<E>` โ ์ ๋ ฌ๋ ๋ฐ์ดํฐ
|
|
174
|
+
|
|
175
|
+
์์๋ค์ **์๋์ผ๋ก ์ ๋ ฌ**ํ๊ณ ์ถ๋ค๋ฉด ์ด ํด๋์ค๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
176
|
+
|
|
177
|
+
**์ปค์คํ
๋น๊ต์**๋ฅผ ๋ฐ๊ฑฐ๋ ์์ฐ ์ ๋ ฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
const sorted = new OrderedCollectable(stream);
|
|
181
|
+
const customSorted = new OrderedCollectable(stream, (a, b) => b - a);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
๐ **์ ๋ ฌ๋ ์ถ๋ ฅ์ด ๋ณด์ฅ๋ฉ๋๋ค.**
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### 8. `UnorderedCollectable<E>` โ ์ ๋ ฌ ์์ (๐ ๊ฐ์ฅ ๋น ๋ฆ)
|
|
189
|
+
|
|
190
|
+
**์์๊ฐ ์ค์ํ์ง ์๊ณ ์ต๊ณ ์ ์ฑ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ** ๋ค์์ ์ฌ์ฉํ์ธ์:
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
const unordered = new UnorderedCollectable(stream);
|
|
194
|
+
// ๋๋
|
|
195
|
+
const fastest = semanticStream.toUnordered();
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
โ
**์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์คํ๋์ง ์์**
|
|
199
|
+
โ
**์์๊ฐ ์ค์ํ์ง ์์ ๋ ์ต๊ณ ์ ์ฑ๋ฅ**
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### 9. `Statistics<E, D>` โ ํต๊ณ ๋ถ์
|
|
204
|
+
|
|
205
|
+
์ซ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ธฐ ์ํ ์ถ์ ๊ธฐ๋ฐ ํด๋์ค์
๋๋ค.
|
|
206
|
+
|
|
207
|
+
#### ์๋ธ ํด๋์ค:
|
|
208
|
+
|
|
209
|
+
- `NumericStatistics<E>` โ `number` ๊ฐ์ฉ
|
|
210
|
+
- `BigIntStatistics<E>` โ `bigint` ๊ฐ์ฉ
|
|
211
|
+
|
|
212
|
+
##### ์ฃผ์ ํต๊ณ ๋ฉ์๋:
|
|
213
|
+
|
|
214
|
+
| ๋ฉ์๋ | ์ค๋ช
| ์์ |
|
|
215
|
+
|--------|------|------|
|
|
216
|
+
| `mean()` | ํ๊ท | `.mean()` |
|
|
217
|
+
| `median()` | ์ค์๊ฐ | `.median()` |
|
|
218
|
+
| `mode()` | ์ต๋น๊ฐ | `.mode()` |
|
|
219
|
+
| `minimum()` | ์ต์๊ฐ | `.minimum()` |
|
|
220
|
+
| `maximum()` | ์ต๋๊ฐ | `.maximum()` |
|
|
221
|
+
| `range()` | ์ต๋๊ฐ - ์ต์๊ฐ | `.range()` |
|
|
222
|
+
| `variance()` | ๋ถ์ฐ | `.variance()` |
|
|
223
|
+
| `standardDeviation()` | ํ์ค ํธ์ฐจ | `.standardDeviation()` |
|
|
224
|
+
| `summate()` | ํฉ๊ณ | `.summate()` |
|
|
225
|
+
| `quantile(q)` | q๋ถ์์ (0~1) | `.quantile(0.5)` โ ์ค์๊ฐ |
|
|
226
|
+
| `frequency()` | ๋น๋ ๋งต | `.frequency()` |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## ๐งช ์ ์ฒด ์์
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { from, toUnordered, toOrdered, sorted, NumericStatistics } from 'semantic-typescript';
|
|
234
|
+
|
|
235
|
+
// ์ํ ๋ฐ์ดํฐ
|
|
236
|
+
const numbers = from([10, 2, 8, 4, 5, 6]);
|
|
237
|
+
|
|
238
|
+
// ๐ ๊ฐ์ฅ ๋น ๋ฆ: ์ ๋ ฌ ์์
|
|
239
|
+
const fastest = numbers.toUnordered();
|
|
240
|
+
console.log(fastest.toArray()); // ์: [10, 2, 8, 4, 5, 6] (์๋ ์์)
|
|
241
|
+
|
|
242
|
+
// ๐ข ์์ฐ ์ ๋ ฌ
|
|
243
|
+
const ordered = numbers.sorted();
|
|
244
|
+
console.log(ordered.toArray()); // [2, 4, 5, 6, 8, 10]
|
|
245
|
+
|
|
246
|
+
// ๐ ํต๊ณ ๋ถ์
|
|
247
|
+
const stats = new NumericStatistics(numbers);
|
|
248
|
+
console.log('ํ๊ท :', stats.mean());
|
|
249
|
+
console.log('์ค์๊ฐ:', stats.median());
|
|
250
|
+
console.log('์ต๋น๊ฐ:', stats.mode());
|
|
251
|
+
console.log('๋ฒ์:', stats.range());
|
|
252
|
+
console.log('ํ์ค ํธ์ฐจ:', stats.standardDeviation());
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## ๐ ๏ธ ์ ํธ๋ฆฌํฐ ํจ์
|
|
258
|
+
|
|
259
|
+
๋ค์ํ **ํ์
๊ฐ๋(Type Guards)** ์ **๋น๊ต ๋๊ตฌ**๋ ์ ๊ณต๋ฉ๋๋ค:
|
|
260
|
+
|
|
261
|
+
| ํจ์ | ์ฉ๋ |
|
|
262
|
+
|------|------|
|
|
263
|
+
| `isString(x)` | `string` ํ์
๊ฐ๋ |
|
|
264
|
+
| `isNumber(x)` | `number` ํ์
๊ฐ๋ |
|
|
265
|
+
| `isBoolean(x)` | `boolean` ํ์
๊ฐ๋ |
|
|
266
|
+
| `isIterable(x)` | ๊ฐ์ฒด๊ฐ ๋ฐ๋ณต ๊ฐ๋ฅํ์ง ํ์ธ |
|
|
267
|
+
| `useCompare(a, b)` | ๋ฒ์ฉ ๋น๊ต ํจ์ |
|
|
268
|
+
| `useRandom(x)` | ์์ฌ ๋์ ์์ฑ๊ธฐ (์ฌ๋ฏธ์ผ์) |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## ๐งฉ ๊ณ ๊ธ: ์ปค์คํ
์์ฑ๊ธฐ & ์๋์ฐ
|
|
273
|
+
|
|
274
|
+
๋ฌดํ ๋๋ ์ ์ด๋ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ํ **์ปค์คํ
์์ฑ๊ธฐ**๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค:
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
const gen = (accept: BiConsumer<number, bigint>, interrupt: Predicate<number>) => {
|
|
278
|
+
for (let i = 0; i < 10; i++) {
|
|
279
|
+
accept(i, BigInt(i));
|
|
280
|
+
if (i === 5) interrupt(i);
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const s = new Semantic(gen);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
๋๋ **์ฌ๋ผ์ด๋ฉ ์๋์ฐ**๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค:
|
|
288
|
+
|
|
289
|
+
```typescript
|
|
290
|
+
const windowed = ordered.slide(3n, 2n); // ํฌ๊ธฐ 3, ์คํ
2
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## ๐ ๋ผ์ด์ ์ค
|
|
296
|
+
|
|
297
|
+
์ด ํ๋ก์ ํธ๋ **MIT ๋ผ์ด์ ์ค** ๋ก ์ ๊ณต๋๋ฉฐ, ์์
์ ยท๊ฐ์ธ์ ์ฉ๋๋ก ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## ๐ ๊ธฐ์ฌ
|
|
302
|
+
|
|
303
|
+
Pull Request, ์ด์(Issue), ์์ด๋์ด ์ ์ ๋ฑ ๋ชจ๋ ํ์ํฉ๋๋ค!
|
|
304
|
+
|
|
305
|
+
---
|
|
306
|
+
|
|
307
|
+
## ๐ ๋น ๋ฅธ ์์ ์์ฝ
|
|
308
|
+
|
|
309
|
+
| ์์
| ๋ฉ์๋ |
|
|
310
|
+
|------|--------|
|
|
311
|
+
| null/undefined ์์ ํ๊ฒ ์ฒ๋ฆฌ | `Optional<T>` |
|
|
312
|
+
| ์คํธ๋ฆผ ์์ฑ | `from([...])`, `range()`, `fill()` |
|
|
313
|
+
| ๋ฐ์ดํฐ ๋ณํ | `map()`, `filter()` |
|
|
314
|
+
| ๋ฐ์ดํฐ ์ ๋ ฌ | `sorted()`, `toOrdered()` |
|
|
315
|
+
| ์ ๋ ฌ ์์ (๊ฐ์ฅ ๋น ๋ฆ) | `toUnordered()` โ
|
|
|
316
|
+
| ๊ทธ๋ฃนํ / ์ง๊ณ | `toMap()`, `group()`, `Collector` |
|
|
317
|
+
| ํต๊ณ | `NumericStatistics`, `mean()`, `median()` ๋ฑ |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## ๐ ๋งํฌ
|
|
322
|
+
|
|
323
|
+
- ๐ฆ npm: https://www.npmjs.com/package/semantic-typescript
|
|
324
|
+
- ๐ GitHub: https://github.com/eloyhere/semantic-typescript
|
|
325
|
+
- ๐ ๋ฌธ์: ์์ค ์ฝ๋ / ํ์
์ ์ ์ฐธ์กฐ
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
**TypeScript์์ ํจ์ํ, ํ์
์์ ํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฆ๊ฒจ๋ณด์ธ์.** ๐
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
โ
**์ฐธ๊ณ :**
|
|
334
|
+
- `toUnordered()` โ **์ ๋ ฌ ์์, ๊ฐ์ฅ ๋น ๋ฆ**
|
|
335
|
+
- ๊ทธ ์ธ (`sorted()`, `toOrdered()` ๋ฑ) โ **๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํจ**
|