JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ã¡ã¢ãªããã©ãŒãã³ã¹ãç¹ã«ã¹ããªãŒã åŠçã«ããã圱é¿ãæ¢ããŸããå¹ççãªã¡ã¢ãªäœ¿çšãšã¢ããªã±ãŒã·ã§ã³æ§èœåäžã®ããã®ã³ãŒãæé©åæ¹æ³ãåŠã³ãŸãããã
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ã¡ã¢ãªããã©ãŒãã³ã¹ïŒã¹ããªãŒã åŠçã«ãããã¡ã¢ãªãžã®åœ±é¿
JavaScriptã®ã€ãã¬ãŒã¿ãã«ããŒïŒmapãfilterãreduceãªã©ïŒã¯ãããŒã¿ã®ã³ã¬ã¯ã·ã§ã³ãæ±ãããã®ç°¡æœã§è¡šçŸåè±ããªæ¹æ³ãæäŸããŸãããããã®ãã«ããŒã¯ã³ãŒãã®å¯èªæ§ãä¿å®æ§ã®é¢ã§å€§ããªå©ç¹ããããããŸãããç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããããŒã¿ã¹ããªãŒã ãæ±ãéã«ã¯ããã®ã¡ã¢ãªããã©ãŒãã³ã¹ãžã®åœ±é¿ãçè§£ããããšãäžå¯æ¬ ã§ãããã®èšäºã§ã¯ãã€ãã¬ãŒã¿ãã«ããŒã®ã¡ã¢ãªç¹æ§ãæãäžããå¹ççãªã¡ã¢ãªäœ¿çšã®ããã®ã³ãŒãæé©åã«é¢ããå®è·µçãªã¬ã€ãã³ã¹ãæäŸããŸãã
ã€ãã¬ãŒã¿ãã«ããŒã®çè§£
ã€ãã¬ãŒã¿ãã«ããŒã¯ãã€ãã©ãã«ã«å¯ŸããŠæäœãè¡ãã颿°åã¹ã¿ã€ã«ã§ããŒã¿ã倿ã»åŠçã§ããã¡ãœããã§ãããããã¯é£éãããŠäœ¿çšã§ããããã«èšèšãããŠãããäžé£ã®æäœãã€ãã©ã€ã³ãäœæããŸããäŸã次ã«ç€ºããŸãïŒ
const numbers = [1, 2, 3, 4, 5];
const squaredEvenNumbers = numbers
.filter(num => num % 2 === 0)
.map(num => num * num);
console.log(squaredEvenNumbers); // Output: [4, 16]
ãã®äŸã§ã¯ãfilterãå¶æ°ãéžæããmapãããããäºä¹ããŠããŸãããã®ãããªé£éçãªã¢ãããŒãã¯ãåŸæ¥ã®ã«ãŒãããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ãšæ¯èŒããŠãã³ãŒãã®æçæ§ã倧å¹
ã«åäžãããããšãã§ããŸãã
å è¡è©äŸ¡ã®ã¡ã¢ãªãžã®åœ±é¿
ã€ãã¬ãŒã¿ãã«ããŒã®ã¡ã¢ãªãžã®åœ±é¿ãçè§£ããäžã§éèŠãªåŽé¢ã¯ãããããå
è¡è©äŸ¡ïŒeager evaluationïŒãšé
å»¶è©äŸ¡ïŒlazy evaluationïŒã®ã©ã¡ããæ¡çšããŠãããã§ããmapãfilterãreduceïŒé
åã«å¯ŸããŠäœ¿çšããå ŽåïŒãå«ãå€ãã®æšæºçãªJavaScriptã®é
åã¡ãœããã¯ã*å
è¡è©äŸ¡*ãå®è¡ããŸããããã¯ãåæäœãæ°ããäžéé
åãçæããããšãæå³ããŸããã¡ã¢ãªãžã®åœ±é¿ã説æããããã«ããã倧ããªäŸãèããŠã¿ãŸãããïŒ
const largeArray = Array.from({ length: 1000000 }, (_, i) => i + 1);
const result = largeArray
.filter(num => num % 2 === 0)
.map(num => num * 2)
.reduce((acc, num) => acc + num, 0);
console.log(result);
ãã®ã·ããªãªã§ã¯ãfilteræäœã¯å¶æ°ã®ã¿ãå«ãæ°ããé
åãäœæããŸããæ¬¡ã«ãmapã¯å€ã2åã«ãã*å¥ã®*æ°ããé
åãäœæããŸããæåŸã«ãreduceãæåŸã®é
åã«å¯ŸããŠå埩åŠçãè¡ããŸãããããã®äžéé
åã®äœæã¯ãç¹ã«å
¥åããŒã¿ã»ããã倧ããå Žåã«ãèããã¡ã¢ãªæ¶è²»ã«ã€ãªããå¯èœæ§ããããŸããäŸãã°ãå
ã®é
åã«100äžåã®èŠçŽ ãå«ãŸããŠããå Žåãfilterã«ãã£ãŠäœæãããäžéé
åã«ã¯çŽ50äžåã®èŠçŽ ãå«ãŸããmapã«ãã£ãŠäœæãããäžéé
åã«ãçŽ50äžåã®èŠçŽ ãå«ãŸããããšã«ãªããŸãããã®äžæçãªã¡ã¢ãªå²ãåœãŠã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãªãŒããŒãããã远å ããŸãã
é å»¶è©äŸ¡ãšãžã§ãã¬ãŒã¿
å è¡è©äŸ¡ã®ã¡ã¢ãªéå¹çæ§ã«å¯ŸåŠãããããJavaScriptã¯*ãžã§ãã¬ãŒã¿*ãš*é å»¶è©äŸ¡*ã®æŠå¿µãæäŸããŠããŸãããžã§ãã¬ãŒã¿ã䜿çšãããšãã¡ã¢ãªå ã«é åå šäœãäºåã«äœæããããšãªããèŠæ±ã«å¿ããŠäžé£ã®å€ãçæãã颿°ãå®çŸ©ã§ããŸããããã¯ãããŒã¿ã段éçã«å°çããã¹ããªãŒã åŠçã«ç¹ã«åœ¹ç«ã¡ãŸãã
function* evenNumbers(numbers) {
for (const num of numbers) {
if (num % 2 === 0) {
yield num;
}
}
}
function* doubledNumbers(numbers) {
for (const num of numbers) {
yield num * 2;
}
}
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumberGenerator = evenNumbers(numbers);
const doubledNumberGenerator = doubledNumbers(evenNumberGenerator);
for (const num of doubledNumberGenerator) {
console.log(num);
}
ãã®äŸã§ã¯ãevenNumbersãšdoubledNumbersã¯ãžã§ãã¬ãŒã¿é¢æ°ã§ããåŒã³åºããããšãèŠæ±ããããšãã«ã®ã¿å€ãçæããã€ãã¬ãŒã¿ãè¿ããŸããfor...ofã«ãŒãã¯doubledNumberGeneratorããå€ãåŒãåºãããããæ¬¡ã«evenNumberGeneratorããå€ãèŠæ±ãããšãã£ãå
·åã«ç¶ããŸããäžéé
åã¯äœæãããã倧å¹
ãªã¡ã¢ãªç¯çŽã«ã€ãªãããŸãã
é å»¶ã€ãã¬ãŒã¿ãã«ããŒã®å®è£
JavaScriptã¯é
åã«çŽæ¥çµã¿èŸŒãŸããé
å»¶ã€ãã¬ãŒã¿ãã«ããŒãæäŸããŠããŸãããããžã§ãã¬ãŒã¿ã䜿çšããŠç¬èªã«ç°¡åã«äœæã§ããŸãã以äžã«mapãšfilterã®é
å»¶ããŒãžã§ã³ãå®è£
ããæ¹æ³ã瀺ããŸãïŒ
function* lazyMap(iterable, callback) {
for (const item of iterable) {
yield callback(item);
}
}
function* lazyFilter(iterable, predicate) {
for (const item of iterable) {
if (predicate(item)) {
yield item;
}
}
}
const largeArray = Array.from({ length: 1000000 }, (_, i) => i + 1);
const lazyEvenNumbers = lazyFilter(largeArray, num => num % 2 === 0);
const lazyDoubledNumbers = lazyMap(lazyEvenNumbers, num => num * 2);
let sum = 0;
for (const num of lazyDoubledNumbers) {
sum += num;
}
console.log(sum);
ãã®å®è£ ã§ã¯ãäžéé åã®äœæãåé¿ããŸããåå€ã¯ãã€ãã¬ãŒã·ã§ã³äžã«å¿ èŠã«ãªã£ããšãã«ã®ã¿åŠçãããŸãããã®ã¢ãããŒãã¯ãéåžžã«å€§ããªããŒã¿ã»ãããç¡éã®ããŒã¿ã¹ããªãŒã ãæ±ãå Žåã«ç¹ã«æçã§ãã
ã¹ããªãŒã åŠçãšã¡ã¢ãªå¹ç
ã¹ããªãŒã åŠçãšã¯ãããŒã¿ãäžåºŠã«ãã¹ãŠã¡ã¢ãªã«ããŒãããã®ã§ã¯ãªããé£ç¶çãªãããŒãšããŠæ±ãããšã§ãããžã§ãã¬ãŒã¿ã«ããé å»¶è©äŸ¡ã¯ãã¹ããªãŒã åŠçã®ã·ããªãªã«çæ³çã§ããäŸãã°ããã¡ã€ã«ããããŒã¿ãèªã¿èŸŒã¿ãäžè¡ãã€åŠçããçµæãå¥ã®ãã¡ã€ã«ã«æžã蟌ãã·ããªãªãèããŠã¿ãŸããããå è¡è©äŸ¡ã䜿çšãããšããã¡ã€ã«å šäœãã¡ã¢ãªã«ããŒãããå¿ èŠããããããã¯å€§ããªãã¡ã€ã«ã§ã¯å®è¡äžå¯èœãªå ŽåããããŸããé å»¶è©äŸ¡ã䜿çšããã°ãèªã¿èŸŒãŸããåè¡ãåŠçã§ãããããã¡ã¢ãªãããããªã³ããæå°éã«æããããŸãã
äŸïŒå€§èŠæš¡ãã°ãã¡ã€ã«ã®åŠç
æ°ã®ã¬ãã€ãã«ããªãå¯èœæ§ã®ãã倧ããªãã°ãã¡ã€ã«ããããç¹å®ã®åºæºã«åºã¥ããŠç¹å®ã®ãšã³ããªãæœåºããå¿ èŠããããšããŸããåŸæ¥ã®é åã¡ãœããã䜿çšãããšããã¡ã€ã«å šäœãé åã«ããŒãããããããã£ã«ã¿ãªã³ã°ããŠããããã£ã«ã¿ãªã³ã°ããããšã³ããªãåŠçããããšãããããããŸãããããã¯ç°¡åã«ã¡ã¢ãªäžè¶³ã«ã€ãªããå¯èœæ§ããããŸãã代ããã«ããžã§ãã¬ãŒã¿ã䜿çšããã¹ããªãŒã ããŒã¹ã®ã¢ãããŒãã䜿çšã§ããŸãã
const fs = require('fs');
const readline = require('readline');
async function* readLines(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
});
for await (const line of rl) {
yield line;
}
}
function* filterLines(lines, keyword) {
for (const line of lines) {
if (line.includes(keyword)) {
yield line;
}
}
}
async function processLogFile(filePath, keyword) {
const lines = readLines(filePath);
const filteredLines = filterLines(lines, keyword);
for await (const line of filteredLines) {
console.log(line); // Process each filtered line
}
}
// Example usage
processLogFile('large_log_file.txt', 'ERROR');
ãã®äŸã§ã¯ãreadLinesã¯readlineã䜿çšããŠãã¡ã€ã«ãäžè¡ãã€èªã¿åããåè¡ããžã§ãã¬ãŒã¿ãšããŠyieldããŸããæ¬¡ã«filterLinesããç¹å®ã®ããŒã¯ãŒãã®æç¡ã«åºã¥ããŠãããã®è¡ããã£ã«ã¿ãªã³ã°ããŸããããã§ã®éèŠãªå©ç¹ã¯ããã¡ã€ã«ã®ãµã€ãºã«é¢ä¿ãªããäžåºŠã«ã¡ã¢ãªã«ååšããã®ã¯äžè¡ã ãã§ããããšã§ãã
æœåšçãªèœãšã穎ãšèæ ®äºé
é å»¶è©äŸ¡ã¯å€§ããªã¡ã¢ãªäžã®å©ç¹ãæäŸããŸãããæœåšçãªæ¬ ç¹ã«æ³šæããããšãäžå¯æ¬ ã§ãïŒ
- è€éæ§ã®å¢å ïŒ é å»¶ã€ãã¬ãŒã¿ãã«ããŒã®å®è£ ã¯ãããå€ãã®ã³ãŒããšãžã§ãã¬ãŒã¿ããã³ã€ãã¬ãŒã¿ãžã®æ·±ãçè§£ãå¿ èŠãšããããšãå€ããã³ãŒãã®è€éæ§ãå¢å€§ãããå¯èœæ§ããããŸãã
- ãããã°ã®é£ããïŒ é å»¶è©äŸ¡ãããã³ãŒãã®ãããã°ã¯ãå®è¡ãããŒãçŽæ¥çã§ãªãå Žåããããããå è¡è©äŸ¡ãããã³ãŒãã®ãããã°ãããé£ããããšããããŸãã
- ãžã§ãã¬ãŒã¿é¢æ°ã®ãªãŒããŒãããïŒ ãžã§ãã¬ãŒã¿é¢æ°ã®äœæãšç®¡çã«ã¯å€å°ã®ãªãŒããŒããããçããå¯èœæ§ããããŸãããããã¯éåžžãã¹ããªãŒã åŠçã®ã·ããªãªã§ã®ã¡ã¢ãªç¯çŽã«æ¯ã¹ãã°ç¡èŠã§ããçšåºŠã§ãã
- å
è¡æ¶è²»ïŒ é
å»¶ã€ãã¬ãŒã¿ãæå³ããå
è¡è©äŸ¡ãããŠããŸããªãããã«æ³šæããŠãã ãããäŸãã°ããžã§ãã¬ãŒã¿ãé
åã«å€æããïŒäŸïŒ
Array.from()ãã¹ãã¬ããæŒç®å...ã䜿çšããïŒãšãã€ãã¬ãŒã¿å šäœãæ¶è²»ããããã¹ãŠã®å€ãã¡ã¢ãªã«æ ŒçŽãããŠããŸããé å»¶è©äŸ¡ã®å©ç¹ãç¡å¹ã«ãªããŸãã
å®äžçã®äŸãšã°ããŒãã«ãªå¿çš
ã¡ã¢ãªå¹çã®é«ãã€ãã¬ãŒã¿ãã«ããŒãšã¹ããªãŒã åŠçã®ååã¯ãããŸããŸãªãã¡ã€ã³ãå°åã§å¿çšå¯èœã§ãã以äžã«ããã€ãã®äŸãæããŸãïŒ
- éèããŒã¿åæïŒã°ããŒãã«ïŒïŒ æ ªåŒåžå Žã®ååŒãã°ãæå·é貚ã®ååŒããŒã¿ãªã©ãå€§èŠæš¡ãªéèããŒã¿ã»ããã®åæã«ã¯ãèšå€§ãªéã®æ å ±ãåŠçããå¿ èŠããããŸããé å»¶è©äŸ¡ã䜿çšãããšãã¡ã¢ãªãªãœãŒã¹ã䜿ãæããããšãªããããã®ããŒã¿ã»ãããåŠçã§ããŸãã
- ã»ã³ãµãŒããŒã¿åŠçïŒIoT - ã¯ãŒã«ãã¯ã€ãïŒïŒ ã¢ãã®ã€ã³ã¿ãŒãããïŒIoTïŒããã€ã¹ã¯ãã»ã³ãµãŒããŒã¿ã®ã¹ããªãŒã ãçæããŸããéœåžå šäœã«åæ£ããã»ã³ãµãŒããã®æž©åºŠæž¬å®å€ã®åæããã³ãã¯ãããã«ãŒããã®ããŒã¿ã«åºã¥ããäº€éæµã®ç£èŠãªã©ããã®ããŒã¿ããªã¢ã«ã¿ã€ã ã§åŠçããããšã¯ãã¹ããªãŒã åŠçæè¡ãã倧ããªæ©æµãåããŸãã
- ãã°ãã¡ã€ã«åæïŒãœãããŠã§ã¢éçº - ã°ããŒãã«ïŒïŒ å ã®äŸã§ç€ºããããã«ããµãŒããŒãã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãããã¯ãŒã¯ããã€ã¹ããã®ãã°ãã¡ã€ã«ã®åæã¯ããœãããŠã§ã¢éçºã«ãããäžè¬çãªã¿ã¹ã¯ã§ããé å»¶è©äŸ¡ã«ããã倧ããªãã°ãã¡ã€ã«ã§ãã¡ã¢ãªåé¡ãåŒãèµ·ããããšãªãå¹ççã«åŠçã§ããŸãã
- ã²ãã ããŒã¿åŠçïŒãã«ã¹ã±ã¢ - åœéïŒïŒ DNAã·ãŒã±ã³ã¹ãªã©ã®ã²ãã ããŒã¿ã®åæã«ã¯ãèšå€§ãªéã®æ å ±ãåŠçããããšãå«ãŸããŸããé å»¶è©äŸ¡ã䜿çšãããšããã®ããŒã¿ãã¡ã¢ãªå¹çã®è¯ãæ¹æ³ã§åŠçã§ããç ç©¶è ã¯ããã§ãªããã°çºèŠäžå¯èœãªãã¿ãŒã³ãæŽå¯ãç¹å®ã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ææ åæïŒããŒã±ãã£ã³ã° - ã°ããŒãã«ïŒïŒ ææ ãåæãããã¬ã³ããç¹å®ããããã«ãœãŒã·ã£ã«ã¡ãã£ã¢ã®ãã£ãŒããåŠçããã«ã¯ãé£ç¶çãªããŒã¿ã¹ããªãŒã ãæ±ãå¿ èŠããããŸããé å»¶è©äŸ¡ã«ãããããŒã±ã¿ãŒã¯ã¡ã¢ãªãªãœãŒã¹ãéè² è·ã«ããããšãªãããããã®ãã£ãŒãããªã¢ã«ã¿ã€ã ã§åŠçã§ããŸãã
ã¡ã¢ãªæé©åã®ããã®ãã¹ããã©ã¯ãã£ã¹
JavaScriptã§ã€ãã¬ãŒã¿ãã«ããŒãšã¹ããªãŒã åŠçã䜿çšããéã®ã¡ã¢ãªããã©ãŒãã³ã¹ãæé©åããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- å¯èœãªå Žåã¯é å»¶è©äŸ¡ã䜿çšããïŒ ç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããããŒã¿ã¹ããªãŒã ãæ±ãå Žåã¯ããžã§ãã¬ãŒã¿ã«ããé å»¶è©äŸ¡ãåªå ããŠãã ããã
- äžèŠãªäžéé åãé¿ããïŒ æäœãå¹ççã«é£éãããé å»¶ã€ãã¬ãŒã¿ãã«ããŒã䜿çšããããšã§ãäžéé åã®äœæãæå°éã«æããŸãã
- ã³ãŒãããããã¡ã€ãªã³ã°ããïŒ ãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠã¡ã¢ãªã®ããã«ããã¯ãç¹å®ããããã«å¿ããŠã³ãŒããæé©åããŸããChrome DevToolsã¯åªããã¡ã¢ãªãããã¡ã€ãªã³ã°æ©èœãæäŸããŸãã
- 代æ¿ããŒã¿æ§é ãæ€èšããïŒ é©åã§ããã°ã
SetãMapãªã©ã®ä»£æ¿ããŒã¿æ§é ã䜿çšããããšãæ€èšããŠãã ããããããã¯ç¹å®ã®æäœã«å¯ŸããŠããè¯ãã¡ã¢ãªããã©ãŒãã³ã¹ãæäŸããå ŽåããããŸãã - ãªãœãŒã¹ãé©åã«ç®¡çããïŒ ã¡ã¢ãªãªãŒã¯ãé²ãããã«ããã¡ã€ã«ãã³ãã«ããããã¯ãŒã¯æ¥ç¶ãªã©ã®ãªãœãŒã¹ãäžèŠã«ãªã£ããå¿ ãè§£æŸããŠãã ããã
- ã¯ããŒãžã£ã®ã¹ã³ãŒãã«æ³šæããïŒ ã¯ããŒãžã£ã¯ãäžèŠã«ãªã£ããªããžã§ã¯ããžã®åç §ãæå³ããä¿æããã¡ã¢ãªãªãŒã¯ãåŒãèµ·ããå¯èœæ§ããããŸããã¯ããŒãžã£ã®ã¹ã³ãŒãã«æ³šæããäžèŠãªå€æ°ããã£ããã£ããªãããã«ããŠãã ããã
- ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãæé©åããïŒ JavaScriptã®ã¬ããŒãžã³ã¬ã¯ã¿ã¯èªåã§ããããªããžã§ã¯ããäžèŠã«ãªã£ãããšãã¬ããŒãžã³ã¬ã¯ã¿ã«ãã³ããšããŠäžããããšã§ãããã©ãŒãã³ã¹ãåäžãããããšãã§ããå ŽåããããŸãã倿°ã
nullã«èšå®ããããšã圹ç«ã€ããšããããŸãã
çµè«
JavaScriptã€ãã¬ãŒã¿ãã«ããŒã®ã¡ã¢ãªããã©ãŒãã³ã¹ãžã®åœ±é¿ãçè§£ããããšã¯ãå¹ççã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãããžã§ãã¬ãŒã¿ã«ããé å»¶è©äŸ¡ã掻çšããã¡ã¢ãªæé©åã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãç¹ã«å€§èŠæš¡ãªããŒã¿ã»ãããã¹ããªãŒã åŠçã®ã·ããªãªã«ãããŠãã¡ã¢ãªæ¶è²»ãå€§å¹ ã«åæžããã³ãŒãã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããã³ãŒãããããã¡ã€ãªã³ã°ããŠã¡ã¢ãªã®ããã«ããã¯ãç¹å®ããç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«æãé©ããããŒã¿æ§é ãšã¢ã«ãŽãªãºã ãéžæããããšãå¿ããªãã§ãã ãããã¡ã¢ãªãæèããã¢ãããŒããæ¡çšããããšã§ãããã©ãŒãã³ã¹ãšãªãœãŒã¹å¹çã®äž¡æ¹ã«åªããJavaScriptã¢ããªã±ãŒã·ã§ã³ãäœæããäžçäžã®ãŠãŒã¶ãŒã«å©çãããããããšãã§ããŸãã