JavaScriptéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã§å¹ççãªããŒã¿åŠçãå®çŸãæ¬ã¬ã€ãã§ã¯ãã¹ã±ãŒã©ãã«ã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³åãã®å ç¢ãªã¹ããªãŒã åŠçãã§ãŒã³ã®æ§ç¯æ¹æ³ã解説ããŸãã
JavaScriptéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ïŒã¹ããªãŒã åŠçãã§ãŒã³
çŸä»£ã®JavaScriptéçºã®äžçã§ã¯ãå€§èŠæš¡ãªããŒã¿ã»ãããšéåææäœãå¹ççã«åŠçããããšãæãéèŠã§ããéåæã€ãã¬ãŒã¿ãšãã€ãã©ã€ã³ã¯ãããŒã¿ã¹ããªãŒã ãéåæã«åŠçãããã³ããããã³ã°ãªæ¹æ³ã§ããŒã¿ãå€æã»æäœããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãããã®ã¢ãããŒãã¯ããªã¢ã«ã¿ã€ã ããŒã¿ã倧ããªãã¡ã€ã«ããŸãã¯è€éãªããŒã¿å€æãæ±ããã¹ã±ãŒã©ãã«ã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§ç¹ã«äŸ¡å€ããããŸãã
éåæã€ãã¬ãŒã¿ãšã¯ïŒ
éåæã€ãã¬ãŒã¿ã¯ãå€ã®ã·ãŒã±ã³ã¹ãéåæã«å埩åŠçã§ããçŸä»£ã®JavaScriptã®æ©èœã§ããéåžžã®ã€ãã¬ãŒã¿ãšäŒŒãŠããŸãããå€ãçŽæ¥è¿ã代ããã«ãã·ãŒã±ã³ã¹ã®æ¬¡ã®å€ã«è§£æ±ºããããããã¹ãè¿ããŸãããã®éåæçãªæ§è³ªã«ããããããã¯ãŒã¯ã¹ããªãŒã ããã¡ã€ã«èªã¿åããã»ã³ãµãŒããŒã¿ãªã©ãæéãšãšãã«ããŒã¿ãçæããããŒã¿ãœãŒã¹ã®åŠçã«æé©ã§ãã
éåæã€ãã¬ãŒã¿ã«ã¯next()ã¡ãœããããããããã¯ãããã¹ãè¿ããŸãããã®ãããã¹ã¯ã2ã€ã®ããããã£ãæã€ãªããžã§ã¯ãã«è§£æ±ºãããŸãïŒ
value: ã·ãŒã±ã³ã¹ã®æ¬¡ã®å€ãdone: å埩åŠçãå®äºãããã©ããã瀺ãããŒã«å€ã
以äžã¯ãæ°å€ã®ã·ãŒã±ã³ã¹ãçæããéåæã€ãã¬ãŒã¿ã®ç°¡åãªäŸã§ãïŒ
async function* numberGenerator(limit) {
for (let i = 0; i < limit; i++) {
await new Promise(resolve => setTimeout(resolve, 100)); // éåææäœãã·ãã¥ã¬ãŒã
yield i;
}
}
(async () => {
for await (const number of numberGenerator(5)) {
console.log(number);
}
})();
ãã®äŸã§ã¯ãnumberGeneratorã¯éåæãžã§ãã¬ãŒã¿é¢æ°ïŒasync function*æ§æã§ç€ºãããŸãïŒã§ããããã¯0ããlimit - 1ãŸã§ã®æ°å€ã®ã·ãŒã±ã³ã¹ãçæããŸããfor await...ofã«ãŒãã¯ããžã§ãã¬ãŒã¿ã«ãã£ãŠçæãããå€ãéåæã«å埩åŠçããŸãã
å®äžçã®ã·ããªãªã«ãããéåæã€ãã¬ãŒã¿ã®çè§£
éåæã€ãã¬ãŒã¿ã¯ã以äžã®ãããªæ¬è³ªçã«åŸ æ©ã䌎ãæäœãæ±ãéã«åªããŠããŸãïŒ
- 倧ããªãã¡ã€ã«ã®èªã¿åãïŒ ãã¡ã€ã«å šäœãã¡ã¢ãªã«ããŒããã代ããã«ãéåæã€ãã¬ãŒã¿ã¯ãã¡ã€ã«ã1è¡ãã€ããŸãã¯ãã£ã³ã¯ããšã«èªã¿åããå©çšå¯èœã«ãªã£ãåéšåãåŠçã§ããŸããããã«ãããã¡ã¢ãªäœ¿çšéãæå°éã«æããããå¿çæ§ãåäžããŸããäŸãã°ãæ±äº¬ã®ãµãŒããŒãã倧ããªãã°ãã¡ã€ã«ãåŠçããå Žåããããã¯ãŒã¯æ¥ç¶ãé ããŠããéåæã€ãã¬ãŒã¿ã䜿çšããŠãã£ã³ã¯åäœã§èªã¿åãããšãã§ããŸãã
- APIããã®ããŒã¿ã¹ããªãŒãã³ã°ïŒ å€ãã®APIã¯ã¹ããªãŒãã³ã°åœ¢åŒã§ããŒã¿ãæäŸããŸããéåæã€ãã¬ãŒã¿ã¯ãã®ã¹ããªãŒã ãæ¶è²»ããããŒã¿ãå°çãããã³ã«åŠçã§ããŸããã¬ã¹ãã³ã¹å šäœãããŠã³ããŒããããã®ãåŸ ã€å¿ èŠã¯ãããŸãããäŸãã°ãæ ªäŸ¡ãã¹ããªãŒãã³ã°ããéèããŒã¿APIãªã©ã§ãã
- ãªã¢ã«ã¿ã€ã ã®ã»ã³ãµãŒããŒã¿ïŒ IoTããã€ã¹ã¯ããã°ãã°é£ç¶çãªã»ã³ãµãŒããŒã¿ã®ã¹ããªãŒã ãçæããŸããéåæã€ãã¬ãŒã¿ã䜿çšããŠãã®ããŒã¿ããªã¢ã«ã¿ã€ã ã§åŠçããç¹å®ã®ã€ãã³ãããããå€ã«åºã¥ããŠã¢ã¯ã·ã§ã³ãããªã¬ãŒã§ããŸããäŸãã°ãã¢ã«ãŒã³ãã³ã®æ°è±¡ã»ã³ãµãŒã枩床ããŒã¿ãã¹ããªãŒãã³ã°ããŠããå Žåãéåæã€ãã¬ãŒã¿ã¯ãã®ããŒã¿ãåŠçããæž©åºŠãæ°·ç¹äžã«äžãã£ãå Žåã«ã¢ã©ãŒããããªã¬ãŒã§ããŸãã
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ãšã¯ïŒ
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ãšã¯ãããŒã¿ã¹ããªãŒã ãåŠçããããã«é£çµãããäžé£ã®éåæã€ãã¬ãŒã¿ã®ããšã§ãããã€ãã©ã€ã³å ã®åã€ãã¬ãŒã¿ã¯ãããŒã¿ããã§ãŒã³å ã®æ¬¡ã®ã€ãã¬ãŒã¿ã«æž¡ãåã«ãããŒã¿ã«å¯ŸããŠç¹å®ã®å€æãæäœãå®è¡ããŸããããã«ãããã¢ãžã¥ãŒã«åŒã§åå©çšå¯èœãªæ¹æ³ã§ãè€éãªããŒã¿åŠçã¯ãŒã¯ãããŒãæ§ç¯ã§ããŸãã
äžå¿çãªèãæ¹ã¯ãè€éãªåŠçã¿ã¹ã¯ãããããããéåæã€ãã¬ãŒã¿ã§è¡šããããããå°ãã管çããããã¹ãããã«åå²ããããšã§ãããããã®ã€ãã¬ãŒã¿ã¯ãã€ãã©ã€ã³ã§æ¥ç¶ãããããã€ãã¬ãŒã¿ã®åºåãæ¬¡ã®ã€ãã¬ãŒã¿ã®å ¥åãšãªããŸãã
ããã¯çµã¿ç«ãŠã©ã€ã³ã®ãããªãã®ã ãšèããŠãã ãããåã¹ããŒã·ã§ã³ã¯ãã©ã€ã³ãæµãã補åã«å¯ŸããŠç¹å®ã®äœæ¥ãè¡ããŸããç§ãã¡ã®å Žåã補åã¯ããŒã¿ã¹ããªãŒã ã§ãããã¹ããŒã·ã§ã³ãéåæã€ãã¬ãŒã¿ã§ãã
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã®æ§ç¯
以äžãè¡ãç°¡åãªéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã®äŸãäœæããŸãããïŒ
- æ°å€ã®ã·ãŒã±ã³ã¹ãçæããã
- 奿°ãé€å€ããã
- æ®ã£ãå¶æ°ãäºä¹ããã
- äºä¹ããæ°å€ãæååã«å€æããã
async function* numberGenerator(limit) {
for (let i = 0; i < limit; i++) {
yield i;
}
}
async function* filter(source, predicate) {
for await (const item of source) {
if (predicate(item)) {
yield item;
}
}
}
async function* map(source, transform) {
for await (const item of source) {
yield transform(item);
}
}
(async () => {
const numbers = numberGenerator(10);
const evenNumbers = filter(numbers, (number) => number % 2 === 0);
const squaredNumbers = map(evenNumbers, (number) => number * number);
const stringifiedNumbers = map(squaredNumbers, (number) => number.toString());
for await (const numberString of stringifiedNumbers) {
console.log(numberString);
}
})();
ãã®äŸã§ã¯ïŒ
numberGeneratorã¯0ãã9ãŸã§ã®æ°å€ã®ã·ãŒã±ã³ã¹ãçæããŸããfilterã¯å¥æ°ãé€å€ããå¶æ°ã®ã¿ãä¿æããŸããmapã¯åå¶æ°ãäºä¹ããŸããmapã¯åäºä¹ãããæ°å€ãæååã«å€æããŸãã
for await...ofã«ãŒãã¯ããã€ãã©ã€ã³ã®æåŸã®éåæã€ãã¬ãŒã¿ïŒstringifiedNumbersïŒãå埩åŠçããåäºä¹ãããæ°å€ãæååãšããŠã³ã³ãœãŒã«ã«åºåããŸãã
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã䜿çšããäž»ãªå©ç¹
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã«ã¯ãããã€ãã®éèŠãªå©ç¹ããããŸãïŒ
- ããã©ãŒãã³ã¹ã®åäžïŒ ããŒã¿ãéåæãã€ãã£ã³ã¯ã§åŠçããããšã«ãããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããé ãããŒã¿ãœãŒã¹ãæ±ãå Žåã«ããã€ãã©ã€ã³ã¯ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸããããã«ãããã¡ã€ã³ã¹ã¬ããã®ããããã³ã°ãé²ããããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸãã
- ã¡ã¢ãªäœ¿çšéã®åæžïŒ ãã€ãã©ã€ã³ã¯ããŒã¿ãã¹ããªãŒãã³ã°æ¹åŒã§åŠçãããããããŒã¿ã»ããå šäœãäžåºŠã«ã¡ã¢ãªã«ããŒãããå¿ èŠããããŸãããããã¯ãéåžžã«å€§ããªãã¡ã€ã«ãé£ç¶çãªããŒã¿ã¹ããªãŒã ãæ±ãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæ¥µããŠéèŠã§ãã
- ã¢ãžã¥ãŒã«æ§ãšåå©çšæ§ïŒ ãã€ãã©ã€ã³å ã®åã€ãã¬ãŒã¿ã¯ç¹å®ã®ã¿ã¹ã¯ãå®è¡ãããããã³ãŒãã¯ããã¢ãžã¥ãŒã«åãããçè§£ãããããªããŸããã€ãã¬ãŒã¿ã¯ãç°ãªãããŒã¿ã¹ããªãŒã ã«å¯ŸããŠåã倿ãè¡ãããã«ãç°ãªããã€ãã©ã€ã³ã§åå©çšã§ããŸãã
- å¯èªæ§ã®åäžïŒ ãã€ãã©ã€ã³ã¯è€éãªããŒã¿åŠçã¯ãŒã¯ãããŒãæç¢ºãã€ç°¡æœãªæ¹æ³ã§è¡šçŸãããããã³ãŒãã®èªã¿æžããä¿å®ã容æã«ãªããŸãã颿°åããã°ã©ãã³ã°ã®ã¹ã¿ã€ã«ã¯äžå€æ§ïŒimmutabilityïŒãä¿é²ããå¯äœçšãé¿ãããããã³ãŒãã®å質ãããã«åäžãããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ ãã€ãã©ã€ã³ã§å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããããšã¯éåžžã«éèŠã§ããåã¹ããããtry/catchãããã¯ã§ã©ãããããããã§ãŒã³å ã«å°çšã®ãšã©ãŒãã³ããªã³ã°ã€ãã¬ãŒã¿ãå©çšããŠãæœåšçãªåé¡ãé©åã«ç®¡çã§ããŸãã
é«åºŠãªãã€ãã©ã€ã³æè¡
äžèšã®åºæ¬çãªäŸãè¶ ããŠãããæŽç·Žãããæè¡ã䜿çšããŠè€éãªãã€ãã©ã€ã³ãæ§ç¯ã§ããŸãïŒ
- ãããã¡ãªã³ã°ïŒ ããŒã¿ãåŠçããåã«ãããçšåºŠã®ããŒã¿ãèç©ããå¿ èŠãããå ŽåããããŸããç¹å®ã®ãããå€ã«éãããŸã§ããŒã¿ããããã¡ãªã³ã°ãããã®åŸãããã¡ãªã³ã°ãããããŒã¿ãåäžã®ãã£ã³ã¯ãšããŠåºåããã€ãã¬ãŒã¿ãäœæã§ããŸããããã¯ããããåŠçãå¯å€ã¬ãŒãã®ããŒã¿ã¹ããªãŒã ãå¹³æ»åããã®ã«åœ¹ç«ã¡ãŸãã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ïŒ ãããã®æè¡ã䜿çšããŠãããŒã¿ãåŠçãããã¬ãŒããå¶åŸ¡ããéè² è·ãé²ããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãããããŠã³ã¹ã¯ãæåŸã®ããŒã¿é ç®ãå°çããŠããäžå®æéãçµéãããŸã§åŠçãé å»¶ãããŸããã¹ããããªã³ã°ã¯ãåŠçã¬ãŒããåäœæéãããã®æå€§é ç®æ°ã«å¶éããŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ å ç¢ãªãšã©ãŒãã³ããªã³ã°ã¯ãã©ã®ãã€ãã©ã€ã³ã«ãšã£ãŠãäžå¯æ¬ ã§ããåã€ãã¬ãŒã¿å ã§try/catchãããã¯ã䜿çšããŠãšã©ãŒãææããåŠçã§ããŸãããããã¯ããšã©ãŒãã€ã³ã¿ãŒã»ããããŠããšã©ãŒã®ãã°èšé²ãæäœã®å詊è¡ãªã©ãé©åãªã¢ã¯ã·ã§ã³ãå®è¡ããå°çšã®ãšã©ãŒãã³ããªã³ã°ã€ãã¬ãŒã¿ãäœæããããšãã§ããŸãã
- ããã¯ãã¬ãã·ã£ãŒïŒ ããã¯ãã¬ãã·ã£ãŒç®¡çã¯ããã€ãã©ã€ã³ãããŒã¿ã§å§åãããªãããã«ããããã«éèŠã§ããäžæµã®ã€ãã¬ãŒã¿ãäžæµã®ã€ãã¬ãŒã¿ãããé ãå Žåãäžæµã®ã€ãã¬ãŒã¿ã¯ããŒã¿çæã¬ãŒããèœãšãå¿ èŠããããããããŸãããããã¯ããããŒå¶åŸ¡ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã©ã€ãã©ãªãªã©ã®æè¡ã䜿çšããŠå®çŸã§ããŸãã
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã®å®çšäŸ
å®äžçã®ã·ããªãªã§éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ãã©ã®ããã«äœ¿çšã§ããããããã«ããã€ãã®å®çšçãªäŸãèŠãŠã¿ãŸãããïŒ
äŸ1ïŒå€§èŠæš¡ãªCSVãã¡ã€ã«ã®åŠç
åŠçããå¿ èŠã®ãã顧客ããŒã¿ãå«ãå€§èŠæš¡ãªCSVãã¡ã€ã«ããããšããŸããéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã䜿çšããŠããã¡ã€ã«ãèªã¿åããåè¡ãè§£æããããŒã¿ã®æ€èšŒãšå€æãå®è¡ã§ããŸãã
const fs = require('fs');
const readline = require('readline');
async function* readFileLines(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
for await (const line of rl) {
yield line;
}
}
async function* parseCSV(source) {
for await (const line of source) {
const values = line.split(',');
// ããã§ããŒã¿ã®æ€èšŒãšå€æãå®è¡
yield values;
}
}
(async () => {
const filePath = 'path/to/your/customer_data.csv';
const lines = readFileLines(filePath);
const parsedData = parseCSV(lines);
for await (const row of parsedData) {
console.log(row);
}
})();
ãã®äŸã§ã¯ãreadlineã䜿çšããŠCSVãã¡ã€ã«ã1è¡ãã€èªã¿åããåè¡ãå€ã®é
åã«è§£æããŸãããã€ãã©ã€ã³ã«ããã«ã€ãã¬ãŒã¿ã远å ããŠãããŒã¿ã®æ€èšŒãã¯ãªãŒãã³ã°ã倿ãããã«è¡ãããšãã§ããŸãã
äŸ2ïŒã¹ããªãŒãã³ã°APIã®å©çš
å€ãã®APIã¯ãServer-Sent EventsïŒSSEïŒãWebSocketsãªã©ãã¹ããªãŒãã³ã°åœ¢åŒã§ããŒã¿ãæäŸããŸããéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã䜿çšããŠãããã®ã¹ããªãŒã ãæ¶è²»ããããŒã¿ããªã¢ã«ã¿ã€ã ã§åŠçã§ããŸãã
const fetch = require('node-fetch');
async function* fetchStream(url) {
const response = await fetch(url);
const reader = response.body.getReader();
try {
while (true) {
const { done, value } = await reader.read();
if (done) {
return;
}
yield new TextDecoder().decode(value);
}
} finally {
reader.releaseLock();
}
}
async function* processData(source) {
for await (const chunk of source) {
// ããã§ããŒã¿ãã£ã³ã¯ãåŠç
yield chunk;
}
}
(async () => {
const url = 'https://api.example.com/data/stream';
const stream = fetchStream(url);
const processedData = processData(stream);
for await (const data of processedData) {
console.log(data);
}
})();
ãã®äŸã§ã¯ãfetch APIã䜿çšããŠã¹ããªãŒãã³ã°ã¬ã¹ãã³ã¹ãååŸããã¬ã¹ãã³ã¹ããã£ããã£ã³ã¯ããšã«èªã¿åããŸãããã€ãã©ã€ã³ã«ã€ãã¬ãŒã¿ã远å ããŠãããŒã¿ã®è§£æã倿ããã®ä»ã®æäœãè¡ãããšãã§ããŸãã
äŸ3ïŒãªã¢ã«ã¿ã€ã ã»ã³ãµãŒããŒã¿ã®åŠç
åè¿°ã®ããã«ãéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã¯ãIoTããã€ã¹ããã®ãªã¢ã«ã¿ã€ã ã»ã³ãµãŒããŒã¿ã®åŠçã«é©ããŠããŸãããã€ãã©ã€ã³ã䜿çšããŠãããŒã¿ãå°çãããã³ã«ãã£ã«ã¿ãªã³ã°ãéèšãåæãè¡ãããšãã§ããŸãã
// ã»ã³ãµãŒããŒã¿ãéåæã€ãã©ãã«ãšããŠåºåãã颿°ããããšä»®å®
async function* sensorDataStream() {
// ã»ã³ãµãŒããŒã¿ã®åºåãã·ãã¥ã¬ãŒã
while (true) {
await new Promise(resolve => setTimeout(resolve, 500));
yield Math.random() * 100; // 枩床ã®èªã¿åããã·ãã¥ã¬ãŒã
}
}
async function* filterOutliers(source, threshold) {
for await (const reading of source) {
if (reading > threshold) {
yield reading;
}
}
}
async function* calculateAverage(source, windowSize) {
let buffer = [];
for await (const reading of source) {
buffer.push(reading);
if (buffer.length > windowSize) {
buffer.shift();
}
if (buffer.length === windowSize) {
const average = buffer.reduce((sum, val) => sum + val, 0) / windowSize;
yield average;
}
}
}
(async () => {
const sensorData = sensorDataStream();
const filteredData = filterOutliers(sensorData, 90); // 90ãè¶
ããèªã¿åãå€ãé€å€
const averageTemperature = calculateAverage(filteredData, 5); // 5ã€ã®èªã¿åãå€ã®å¹³åãèšç®
for await (const average of averageTemperature) {
console.log(`Average Temperature: ${average.toFixed(2)}`);
}
})();
ãã®äŸã§ã¯ãã»ã³ãµãŒããŒã¿ã¹ããªãŒã ãã·ãã¥ã¬ãŒããããã€ãã©ã€ã³ã䜿çšããŠç°åžžãªèªã¿åãå€ãé€å€ããç§»åå¹³åæž©åºŠãèšç®ããŸããããã«ãããã»ã³ãµãŒããŒã¿ã®åŸåãç°åžžãç¹å®ã§ããŸãã
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã®ããã®ã©ã€ãã©ãªãšããŒã«
ãã¬ãŒã³ãªJavaScriptã䜿çšããŠéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ãæ§ç¯ããããšãã§ããŸãããããã»ã¹ãç°¡çŽ åããè¿œå æ©èœãæäŸããããã€ãã®ã©ã€ãã©ãªãããŒã«ããããŸãïŒ
- IxJS (Reactive Extensions for JavaScript): IxJSã¯ãJavaScriptã«ããããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ããã®åŒ·åãªã©ã€ãã©ãªã§ããéåæã€ãã©ãã«ãäœæã»æäœããããã®è±å¯ãªãªãã¬ãŒã¿ã»ãããæäŸããè€éãªãã€ãã©ã€ã³ã®æ§ç¯ã容æã«ããŸãã
- Highland.js: Highland.jsã¯ãJavaScriptçšã®é¢æ°åã¹ããªãŒãã³ã°ã©ã€ãã©ãªã§ããIxJSãšåæ§ã®ãªãã¬ãŒã¿ã»ãããæäŸããŸãããã·ã³ãã«ããšäœ¿ããããã«éç¹ã眮ããŠããŸãã
- Node.js Streams API: Node.jsã¯ãéåæã€ãã¬ãŒã¿ãäœæããããã«äœ¿çšã§ããçµã¿èŸŒã¿ã®Streams APIãæäŸããŠããŸããStreams APIã¯IxJSãHighland.jsãããäœã¬ãã«ã§ãããã¹ããªãŒãã³ã°ããã»ã¹ããã詳现ã«å¶åŸ¡ã§ããŸãã
ããããèœãšã穎ãšãã¹ããã©ã¯ãã£ã¹
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã«ã¯å€ãã®å©ç¹ããããŸããããã€ãã©ã€ã³ãå ç¢ã§å¹ççã§ããããšãä¿èšŒããããã«ãããã€ãã®äžè¬çãªèœãšãç©Žã«æ³šæãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšãéèŠã§ãïŒ
- ããããã³ã°æäœãé¿ããïŒ ãã€ãã©ã€ã³å ã®ãã¹ãŠã®ã€ãã¬ãŒã¿ãéåææäœãå®è¡ããã¡ã€ã³ã¹ã¬ããããããã¯ããªãããã«ããŠãã ãããI/Oããã®ä»ã®æéã®ãããã¿ã¹ã¯ãåŠçããã«ã¯ãéåæé¢æ°ãšãããã¹ã䜿çšããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒ åã€ãã¬ãŒã¿ã«å ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããæœåšçãªãšã©ãŒãææããŠåŠçããŸãããšã©ãŒã管çããã«ã¯ãtry/catchãããã¯ãŸãã¯å°çšã®ãšã©ãŒãã³ããªã³ã°ã€ãã¬ãŒã¿ã䜿çšããŸãã
- ããã¯ãã¬ãã·ã£ãŒã管çããïŒ ãã€ãã©ã€ã³ãããŒã¿ã§å§åãããã®ãé²ãããã«ãããã¯ãã¬ãã·ã£ãŒç®¡çãå®è£ ããŸããããŒã¿ãããŒãå¶åŸ¡ããã«ã¯ããããŒå¶åŸ¡ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã©ã€ãã©ãªãªã©ã®æè¡ã䜿çšããŸãã
- ããã©ãŒãã³ã¹ãæé©åããïŒ ãã€ãã©ã€ã³ããããã¡ã€ãªã³ã°ããŠããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããããã«å¿ããŠã³ãŒããæé©åããŸããããã©ãŒãã³ã¹ãåäžãããã«ã¯ããããã¡ãªã³ã°ããããŠã³ã¹ãã¹ããããªã³ã°ãªã©ã®æè¡ã䜿çšããŸãã
- 培åºçã«ãã¹ãããïŒ ãã€ãã©ã€ã³ã培åºçã«ãã¹ãããŠãããŸããŸãªæ¡ä»¶äžã§æ£ããåäœããããšã確èªããŸããåäœãã¹ããšçµ±åãã¹ãã䜿çšããŠãåã€ãã¬ãŒã¿ãšãã€ãã©ã€ã³å šäœã®åäœãæ€èšŒããŸãã
çµè«
éåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã¯ãå€§èŠæš¡ãªããŒã¿ã»ãããšéåææäœãæ±ããã¹ã±ãŒã©ãã«ã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªããŒã«ã§ããè€éãªããŒã¿åŠçã¯ãŒã¯ãããŒãããå°ãã管çããããã¹ãããã«åå²ããããšã§ããã€ãã©ã€ã³ã¯ããã©ãŒãã³ã¹ãåäžãããã¡ã¢ãªäœ¿çšéãåæžããã³ãŒãã®å¯èªæ§ãé«ããããšãã§ããŸããéåæã€ãã¬ãŒã¿ãšãã€ãã©ã€ã³ã®åºæ¬ãçè§£ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããã®æè¡ã掻çšããŠå¹ççã§å ç¢ãªããŒã¿åŠçãœãªã¥ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
éåæããã°ã©ãã³ã°ã¯çŸä»£ã®JavaScriptéçºã«äžå¯æ¬ ã§ãããéåæã€ãã¬ãŒã¿ãšãã€ãã©ã€ã³ã¯ããŒã¿ã¹ããªãŒã ãæ±ãããã®ã¯ãªãŒã³ã§å¹ççããã€åŒ·åãªæ¹æ³ãæäŸããŸããå€§èŠæš¡ãªãã¡ã€ã«ãåŠçããŠããå Žåã§ããã¹ããªãŒãã³ã°APIãå©çšããŠããå Žåã§ãããªã¢ã«ã¿ã€ã ã®ã»ã³ãµãŒããŒã¿ãåæããŠããå Žåã§ããéåæã€ãã¬ãŒã¿ãã€ãã©ã€ã³ã¯ã仿¥ã®ããŒã¿éçŽåã®äžçã®èŠæ±ã«å¿ããã¹ã±ãŒã©ãã«ã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã«åœ¹ç«ã¡ãŸãã