JavaScriptãã€ãã©ã€ã³æŒç®åã®åæããã¹ã¿ãŒãããšã¬ã¬ã³ãã§å¹ççãªé¢æ°ãã§ãŒã³ãå®çŸãã°ããŒãã«ãªäŸã亀ããã³ãŒãã®å¯èªæ§ãšããã©ãŒãã³ã¹ãæé©åããŸãã
JavaScriptãã€ãã©ã€ã³æŒç®åã®åæïŒã°ããŒãã«éçºè ã®ããã®é¢æ°ãã§ãŒã³æé©å
æ¥éã«é²åããJavaScriptéçºã®äžçã§ã¯ãå¹çæ§ãšå¯èªæ§ãæãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ãè€éã«ãªãã«ã€ããŠãäžé£ã®æäœã®ç®¡çã¯ããã«é¢åã«ãªãå¯èœæ§ããããŸããåŸæ¥ã®ã¡ãœãããã§ãŒã³ã¯äŸ¿å©ã§ãããæã«ã¯æ·±ããã¹ãããããã远跡ãå°é£ãªã³ãŒãã«ã€ãªããããšããããŸããããã§ã颿°åæã®æŠå¿µãç¹ã«ç»å Žãã€ã€ãããã€ãã©ã€ã³æŒç®åã«ãã£ãŠåŒ·åããããã®ãã颿°ãã§ãŒã³ãæé©åããããã®åŒ·åã§ãšã¬ã¬ã³ããªè§£æ±ºçãæäŸããŸãããã®èšäºã§ã¯ãJavaScriptã®ãã€ãã©ã€ã³æŒç®åã«ããåæã®è€éããæãäžãããã®å©ç¹ãå®çšçãªå¿çšäŸããããŠã°ããŒãã«ãªéçºè å±€ã«åããŠã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãåäžãããæ¹æ³ãæ¢ããŸãã
è€éãªé¢æ°ãã§ãŒã³ã®èª²é¡
äžé£ã®å€æãéããŠããŒã¿ãåŠçããå¿ èŠãããã·ããªãªãèããŠã¿ãŸããããæç¢ºãªãã¿ãŒã³ããªãå Žåããã°ãã°æ¬¡ã®ãããªã³ãŒãã«ãªããŸãã
äŸ1ïŒåŸæ¥ã®ãã¹ãããã颿°åŒã³åºã
function processData(data) {
return addTax(calculateDiscount(applyCoupon(data)));
}
const initialData = { price: 100, coupon: 'SAVE10' };
const finalResult = processData(initialData);
ããã¯æ©èœããŸãããæäœã®é åºãæ··ä¹±ãæãå¯èœæ§ããããŸããæãå åŽã®é¢æ°ãæåã«é©çšãããæãå€åŽã®é¢æ°ãæåŸã«é©çšãããŸããã¹ããããå¢ããã»ã©ãã¹ããæ·±ããªããäžç®ã§é åºã倿ããã®ãé£ãããªããŸããããäžã€ã®äžè¬çãªã¢ãããŒãã¯æ¬¡ã®ãšããã§ãã
äŸ2ïŒé次çãªå€æ°ä»£å ¥
function processDataSequential(data) {
let processed = data;
processed = applyCoupon(processed);
processed = calculateDiscount(processed);
processed = addTax(processed);
return processed;
}
const initialData = { price: 100, coupon: 'SAVE10' };
const finalResult = processDataSequential(initialData);
ãã®é次çãªã¢ãããŒãã¯æäœã®é åºã«é¢ããŠèªã¿ãããã§ãããåã¹ãããã§äžé倿°ãå°å ¥ããŸããæ¬è³ªçã«æªãããã§ã¯ãããŸããããå€ãã®ã¹ããããããã·ããªãªã§ã¯ãã¹ã³ãŒããä¹±éã«ããç°¡æœããæãªãå¯èœæ§ããããŸãããŸãã倿°ã®åœä»€çãªå€æŽãå¿ èŠãšãªããããã¯é¢æ°åããã°ã©ãã³ã°ã®ãã©ãã€ã ã§ã¯ããŸãäžè¬çã§ã¯ãããŸããã
ãã€ãã©ã€ã³æŒç®åã®å°å ¥
ãã€ãã©ã€ã³æŒç®åïŒãã°ãã°|>ã§è¡šãããïŒã¯ã颿°åæãç°¡çŽ åãæç¢ºåããããã«èšèšããããææ¡äžã®ECMAScriptã®æ©èœã§ããããã«ããããã颿°ã®çµæã次ã®é¢æ°ã«åŒæ°ãšããŠæž¡ãããšããããèªç¶ãªå·Šããå³ãžã®èªã¿åããããŒã§å¯èœã«ãªããŸãã颿°åŒã³åºããå
åŽããå€åŽãžãã¹ãããããäžé倿°ã䜿çšããããã代ããã«ãããŒã¿ããã€ãã©ã€ã³ãæµãããã®ããã«æäœãé£éãããããšãã§ããŸãã
åºæ¬çãªæ§æã¯æ¬¡ã®ãšããã§ãïŒ value |> function1 |> function2 |> function3
ããã¯æ¬¡ã®ããã«èªããŸãïŒãvalueãåããfunction1ãéããŠãã€ããããã®çµæãfunction2ã«ãã€ãããæåŸã«ãã®çµæãfunction3ã«ãã€ãããããããã¯ãã¹ããããåŒã³åºãæ§é ãããã¯ããã«çŽæçã§ãã
åã®äŸã«æ»ãããã€ãã©ã€ã³æŒç®åã䜿ããšã©ã®ããã«ãªããèŠãŠã¿ãŸãããã
äŸ3ïŒãã€ãã©ã€ã³æŒç®åã®äœ¿çšïŒæŠå¿µçïŒ
const initialData = { price: 100, coupon: 'SAVE10' };
const finalResult = initialData
|> applyCoupon
|> calculateDiscount
|> addTax;
ãã®æ§æã¯éåžžã«æç¢ºã§ããããŒã¿ã¯äžããäžãžãå颿°ãé çªã«æµããŸããå®è¡é åºã¯ããã«ããããŸãïŒæåã«applyCouponãå®è¡ããããã®çµæã«å¯ŸããŠcalculateDiscountããæåŸã«ãã®çµæã«å¯ŸããŠaddTaxãå®è¡ãããŸãããã®å®£èšçãªã¹ã¿ã€ã«ã¯ãç¹ã«è€éãªããŒã¿åŠçãã€ãã©ã€ã³ã«ãããŠãå¯èªæ§ãšä¿å®æ§ãåäžãããŸãã
ãã€ãã©ã€ã³æŒç®åã®çŸç¶
ãã€ãã©ã€ã³æŒç®åã¯TC39ïŒECMAæè¡å§å¡äŒ39ïŒã®ææ¡ã®æ§ã ãªæ®µéã«ããããšã«æ³šæããããšãéèŠã§ããé²å±ã¯ãããŸããããECMAScriptæšæºãžã®çµã¿èŸŒã¿ã¯ãŸã éçºäžã§ããçŸåšããã©ã³ã¹ãã€ã«ïŒäŸïŒBabelïŒãç¹å®ã®ã³ã³ãã€ã©ãã©ã°ãªãã§ã¯ããã¹ãŠã®JavaScriptç°å¢ã§ãã€ãã£ãã«ãµããŒããããŠããããã§ã¯ãããŸããã
仿¥ãæ¬çªç°å¢ã§å®çšçã«äœ¿çšããããã«ã¯ã次ã®ãããããå¿ èŠã«ãªãå ŽåããããŸãã
- Babelã®ãããªãã©ã³ã¹ãã€ã©ãé©åãªãã©ã°ã€ã³ïŒäŸïŒ
@babel/plugin-proposal-pipeline-operatorïŒãšå ±ã«äœ¿çšããã - æ¢åã®JavaScriptæ©èœã䜿çšããŠåæ§ã®ãã¿ãŒã³ãæ¡çšããïŒããã«ã€ããŠã¯åŸè¿°ããŸãïŒã
ãã€ãã©ã€ã³æŒç®ååæã®å©ç¹
ãã€ãã©ã€ã³æŒç®åããŸãã¯ãã®åäœãæš¡å£ãããã¿ãŒã³ã®æ¡çšã¯ãããã€ãã®éèŠãªå©ç¹ããããããŸãã
1. å¯èªæ§ã®åäž
å ã«ç€ºããããã«ãå·Šããå³ãžã®ãããŒã¯ã³ãŒãã®æçæ§ãå€§å¹ ã«åäžãããŸããéçºè ã¯ããã¹ããããåŒã³åºãã粟ç¥çã«å±éããããäžé倿°ã远跡ãããããå¿ èŠãªããããŒã¿å€æã®ã¹ããããç°¡åã«è¿œè·¡ã§ããŸããããã¯ãããŒã ã®å°ççãªååžã«é¢ä¿ãªããå ±åãããžã§ã¯ããå°æ¥ã®ã³ãŒãã¡ã³ããã³ã¹ã«ãšã£ãŠéåžžã«éèŠã§ãã
2. ä¿å®æ§ã®åäž
ã³ãŒããèªã¿ããããšãä¿å®ã容æã«ãªããŸãããã€ãã©ã€ã³ã«ã¹ãããã远å ãåé€ããŸãã¯å€æŽããã®ã¯ç°¡åã§ãããã§ãŒã³ã«é¢æ°åŒã³åºããæ¿å ¥ãŸãã¯åé€ããã ãã§ããããã«ããããªãã¡ã¯ã¿ãªã³ã°ããããã°æã®éçºè ã®èªç¥çè² è·ã軜æžãããŸãã
3. 颿°åããã°ã©ãã³ã°ååã®ä¿é²
ãã€ãã©ã€ã³æŒç®åã¯é¢æ°åããã°ã©ãã³ã°ã®ãã©ãã€ã ãšèªç¶ã«äžèŽããçŽç²é¢æ°ãšäžå€æ§ïŒã€ãã¥ãŒã¿ããªãã£ïŒã®äœ¿çšãä¿é²ããŸãããã€ãã©ã€ã³å ã®å颿°ã¯ãçæ³çã«ã¯å ¥åãåãåããå¯äœçšãªãã§åºåãè¿ããããäºæž¬å¯èœã§ãã¹ãããããã³ãŒãã«ã€ãªãããŸããããã¯çŸä»£ã®ãœãããŠã§ã¢éçºã«ãããŠæ®éçã«æçãªã¢ãããŒãã§ãã
4. ãã€ã©ãŒãã¬ãŒããšäžé倿°ã®åæž
åã¹ãããã§æç€ºçãªäžé倿°ãäžèŠã«ãªãããšã§ããã€ãã©ã€ã³æŒç®åã¯ã³ãŒãã®åé·æ§ãæžãããŸãããã®ç°¡æœãã«ãããã³ãŒãã¯ããçããããžãã¯èªäœã«éäžãããã®ã«ãªããŸãã
仿¥ãã€ãã©ã€ã³é¢šã®ãã¿ãŒã³ãå®è£ ãã
ãã€ãã£ããµããŒããåŸ ã€éããŸãã¯ãã©ã³ã¹ãã€ã«ã奜ãŸãªãå Žåã¯ãæ¢åã®JavaScriptæ©èœã䜿çšããŠåæ§ã®ãã¿ãŒã³ãå®è£ ã§ããŸããäžå¿çãªã¢ã€ãã¢ã¯ã颿°ãé çªã«é£éãããæ¹æ³ãäœæããããšã§ãã
1. `reduce`ãåæã«äœ¿çšãã
Array.prototype.reduceã¡ãœãããå·§ã¿ã«äœ¿çšããŠããã€ãã©ã€ã³ã®ãããªæ©èœãå®çŸã§ããŸããäžé£ã®é¢æ°ãé
åãšããŠæ±ããããããåæããŒã¿ã«é©çšããŠããããšãã§ããŸãã
äŸ4ïŒ`reduce`ã䜿çšãããã€ãã©ã€ã³
const functions = [
applyCoupon,
calculateDiscount,
addTax
];
const initialData = { price: 100, coupon: 'SAVE10' };
const finalResult = functions.reduce((acc, fn) => fn(acc), initialData);
ãã®ã¢ãããŒãã¯ãæŠå¿µçãªãã€ãã©ã€ã³æŒç®åãšåã鿬¡å®è¡ãšå¯èªæ§ãå®çŸããŸããã¢ãã¥ã ã¬ãŒã¿accãäžéçµæãä¿æãããããæ¬¡ã®é¢æ°fnã«æž¡ãããŸãã
2. ã«ã¹ã¿ã ãã€ãã©ã€ã³ãã«ããŒé¢æ°
ãã®reduceãã¿ãŒã³ãåå©çšå¯èœãªãã«ããŒé¢æ°ã«æœè±¡åã§ããŸãã
äŸ5ïŒã«ã¹ã¿ã `pipe`ãã«ããŒ
function pipe(...fns) {
return (initialValue) => {
return fns.reduce((acc, fn) => fn(acc), initialValue);
};
}
const processData = pipe(
applyCoupon,
calculateDiscount,
addTax
);
const initialData = { price: 100, coupon: 'SAVE10' };
const finalResult = processData(initialData);
ãã®pipe颿°ã¯ã颿°åããã°ã©ãã³ã°ã«ãããåæã®åºç€ã§ããä»»æã®æ°ã®é¢æ°ãåãåããåæå€ã§åŒã³åºããããšãã«ããããé çªã«é©çšããæ°ãã颿°ãè¿ããŸãããã®ãã¿ãŒã³ã¯ãããŸããŸãªèšèªãéçºæåã®é¢æ°åããã°ã©ãã³ã°ã³ãã¥ããã£ã§åºãæ¡çšãããçè§£ãããŠããŸãã
3. Babelã«ãããã©ã³ã¹ãã€ã«
ãã§ã«Babelããã©ã³ã¹ãã€ã«ã«äœ¿çšããŠãããããžã§ã¯ãã§äœæ¥ããŠããå Žåããã€ãã©ã€ã³æŒç®åãæå¹ã«ããã®ã¯ç°¡åã§ããé¢é£ãããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãã.babelrcãŸãã¯babel.config.jsãã¡ã€ã«ãèšå®ããå¿
èŠããããŸãã
ãŸãããã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸãã
npm install --save-dev @babel/plugin-proposal-pipeline-operator
# or
yarn add --dev @babel/plugin-proposal-pipeline-operator
次ã«ãBabelãèšå®ããŸãã
äŸ6ïŒBabelã®èšå®ïŒbabel.config.jsïŒ
module.exports = {
plugins: [
['@babel/plugin-proposal-pipeline-operator', { proposal: 'minimal' }] // or 'fsharp' or 'hack' based on desired behavior
]
};
proposalãªãã·ã§ã³ã¯ã䜿çšããããã€ãã©ã€ã³æŒç®åã®åäœã®ããŒãžã§ã³ãæå®ããŸãããminimalãããããŒã¶ã«ãæãäžè¬çã§ãåºæ¬çãªå·Šããå³ãžã®ãã€ãã«åèŽããŠããŸãã
èšå®ãå®äºããã°ãJavaScriptã³ãŒãã§çŽæ¥|>æ§æã䜿çšã§ããBabelããããåçã®ãã©ãŠã¶äºæã®JavaScriptã«å€æããŸãã
ã°ããŒãã«ãªå®çšäŸãšãŠãŒã¹ã±ãŒã¹
ãã€ãã©ã€ã³åæã®å©ç¹ã¯ãã³ãŒãã®æçæ§ãšä¿å®æ§ã忣ããŒã ã«ãšã£ãŠäžå¯æ¬ ãªã°ããŒãã«éçºã·ããªãªã§å¢å¹ ãããŸãã
1. Eã³ããŒã¹ã®æ³šæåŠç
è€æ°ã®å°åã§éå¶ãããŠããEã³ããŒã¹ãã©ãããã©ãŒã ãæ³åããŠã¿ãŠãã ãããæ³šæã¯äžé£ã®ã¹ããããçµããããããŸããã
- å°ååºæã®å²åŒãé©çšããã
- é éå ã®åœã«åºã¥ããŠçšéãèšç®ããã
- åšåº«ã確èªããã
- ç°ãªã決æžã²ãŒããŠã§ã€ãä»ããŠæ¯æããåŠçããã
- é éããžã¹ãã£ã¯ã¹ãéå§ããã
äŸ7ïŒEã³ããŒã¹æ³šæãã€ãã©ã€ã³ïŒæŠå¿µçïŒ
const orderDetails = { /* ... order data ... */ };
const finalizedOrder = orderDetails
|> applyRegionalDiscounts
|> calculateLocalTaxes
|> checkInventory
|> processPayment
|> initiateShipping;
ãã®ãã€ãã©ã€ã³ã¯ã泚æåŠçããã»ã¹ãæç¢ºã«æåããŸããäŸãã°ãã ã³ãã€ããã«ãªã³ããµã³ããŠãã®éçºè ã¯ãåã ã®é¢æ°ã®å®è£ ã«é¢ããæ·±ãã³ã³ããã¹ããå¿ èŠãšããã«ã泚æã®æµããç°¡åã«çè§£ã§ããŸããããã«ãããè§£éã®èª€ããæžãããåœé泚æã§åé¡ãçºçããéã®ãããã°ãè¿ éåããŸãã
2. ããŒã¿å€æãšAPIçµ±å
ããŸããŸãªå€éšAPIãšçµ±åãããã倿§ãªãœãŒã¹ããã®ããŒã¿ãåŠçãããããéã«ããã€ãã©ã€ã³ã¯å€æãå¹çåã§ããŸãã
ã°ããŒãã«ãªå€©æ°APIããããŒã¿ãååŸããç°ãªãåäœïŒäŸïŒææ°ããè¯æ°ãžïŒã«æ£èŠåããç¹å®ã®ãã£ãŒã«ããæœåºãã衚瀺çšã«ãã©ãŒãããããããšãèããŠã¿ãŸãããã
äŸ8ïŒå€©æ°ããŒã¿åŠçãã€ãã©ã€ã³
const rawWeatherData = await fetchWeatherApi('London'); // Assume this returns raw JSON
const formattedWeather = rawWeatherData
|> normalizeUnits (e.g., from Kelvin to Celsius)
|> extractRelevantFields (temp, windSpeed, description)
|> formatForDisplay (using locale-specific number formats);
// For a user in the US, formatForDisplay might use Fahrenheit and US English
// For a user in Japan, it might use Celsius and Japanese.
ãã®ãã¿ãŒã³ã«ãããéçºè ã¯å€æãã€ãã©ã€ã³å šäœãäžç®ã§ç¢ºèªã§ããããŒã¿ãäžæ£ãªåœ¢åŒã§ãããã誀ã£ãŠå€æãããŠããç®æãç¹å®ãããããªããŸããããã¯ãåœéçãªããŒã¿æšæºãããŒã«ãªãŒãŒã·ã§ã³èŠä»¶ãæ±ãéã«éåžžã«è²Žéã§ãã
3. ãŠãŒã¶ãŒèªèšŒã»èªå¯ãããŒ
èªèšŒãšèªå¯ãå«ãè€éãªãŠãŒã¶ãŒãããŒãããã€ãã©ã€ã³æ§é ã®æ©æµãåããããšãã§ããŸãã
ãŠãŒã¶ãŒãä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããšãããšããããŒã«ã¯ä»¥äžãå«ãŸããå ŽåããããŸãã
- ãŠãŒã¶ãŒããŒã¯ã³ãæ€èšŒããã
- ãŠãŒã¶ãŒãããã¡ã€ã«ããŒã¿ãååŸããã
- ãŠãŒã¶ãŒãé©åãªããŒã«ãã°ã«ãŒãã«å±ããŠããã確èªããã
- ç¹å®ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèªå¯ããã
äŸ9ïŒèªå¯ãã€ãã©ã€ã³
function authorizeUser(request) {
return request
|> verifyAuthToken
|> fetchUserProfile
|> checkUserRoles
|> grantOrDenyAccess;
}
const userRequest = { /* ... request details ... */ };
const accessResult = authorizeUser(userRequest);
ããã«ãããèªå¯ããžãã¯ãéåžžã«æç¢ºã«ãªããã»ãã¥ãªãã£ã«ææãªæäœã«ã¯äžå¯æ¬ ã§ããããã¯ãšã³ããµãŒãã¹ã«åãçµãç°ãªãã¿ã€ã ãŸãŒã³ã®éçºè ã¯ããã®ãããªããžãã¯ã§å¹ççã«åæ¥ã§ããŸãã
èæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
ãã€ãã©ã€ã³æŒç®åã¯å€§ããªå©ç¹ãæäŸããŸããããã®å¹æçãªäœ¿çšã«ã¯æ éãªèæ ®ãå¿ èŠã§ãã
1. 颿°ãçŽç²ã§å¯äœçšã®ãªãç¶æ ã«ä¿ã€
ãã€ãã©ã€ã³ãã¿ãŒã³ã¯ãçŽç²é¢æ°ïŒåãå ¥åã«å¯ŸããŠåžžã«åãåºåãè¿ããå¯äœçšããªã颿°ïŒãšå ±ã«äœ¿çšããããšãã«æãèŒããŸãããã®äºæž¬å¯èœæ§ã¯é¢æ°åããã°ã©ãã³ã°ã®åºç€ã§ããããã€ãã©ã€ã³ã®ãããã°ãã¯ããã«å®¹æã«ããŸããäºæž¬äžå¯èœãªå¯äœçšãç°ãªãç°å¢ããããã¯ãŒã¯æ¡ä»¶ãè¶ããŠè¿œè·¡ããã®ãé£ããã°ããŒãã«ãªæèã§ã¯ãçŽç²é¢æ°ã¯ããã«éèŠã«ãªããŸãã
2. å°ããªåäžç®çã®é¢æ°ãç®æã
ãã€ãã©ã€ã³å ã®å颿°ã¯ãçæ³çã«ã¯åäžã®æç¢ºã«å®çŸ©ãããã¿ã¹ã¯ãå®è¡ãã¹ãã§ããããã¯åäžè²¬ä»»ã®ååã«åŸãããã€ãã©ã€ã³ãããã¢ãžã¥ãŒã«åããçè§£ããããããŸããäžã€ã®ã¢ããªã·ãã¯ãªé¢æ°ãå€ãããããšã詊ã¿ã代ããã«ãäžé£ã®å°ãããŠçµã¿åããå¯èœãªã¹ããããæã€ããšã«ãªããŸãã
3. ç¶æ ãšäžå€æ§ïŒã€ãã¥ãŒã¿ããªãã£ïŒã®ç®¡ç
倿Žãå¿ èŠãªè€éãªããŒã¿æ§é ããªããžã§ã¯ããæ±ãå Žåã¯ãäžå€ããŒã¿ïŒã€ãã¥ãŒã¿ãã«ããŒã¿ïŒãæ±ã£ãŠããããšã確èªããŠãã ããããã€ãã©ã€ã³å ã®å颿°ã¯ãå ã®ãªããžã§ã¯ãã倿Žããã®ã§ã¯ãªãã*æ°ãã*倿Žããããªããžã§ã¯ããè¿ãã¹ãã§ããImmerãRamdaã®ãããªã©ã€ãã©ãªã¯ãäžå€æ§ã广çã«ç®¡çããã®ã«åœ¹ç«ã¡ãŸãã
äŸ10ïŒãã€ãã©ã€ã³ã«ãããäžå€æŽæ°
import produce from 'immer';
const addDiscount = (item) => produce(item, draft => {
draft.discountApplied = true;
draft.finalPrice = item.price * 0.9;
});
const initialItem = { id: 1, price: 100 };
const processedItem = initialItem
|> addDiscount;
console.log(initialItem); // original item is unchanged
console.log(processedItem); // new item with discount
4. ãšã©ãŒåŠçæŠç¥ãæ€èšãã
ãã€ãã©ã€ã³å ã®é¢æ°ããšã©ãŒãã¹ããŒããå Žåãã©ããªããŸããïŒæšæºçãªJavaScriptã®ãšã©ãŒäŒæã¯ãã€ãã©ã€ã³ã忢ãããŸãããšã©ãŒåŠçæŠç¥ãå®è£ ããå¿ èŠããããããããŸããã
- åã ã®é¢æ°ãã©ããããïŒ å颿°å ã§try-catchãããã¯ã䜿çšãããããšã©ãŒåŠçãŠãŒãã£ãªãã£ã§ã©ããããŸãã
- å°çšã®ãšã©ãŒåŠç颿°ã䜿çšããïŒ ãã€ãã©ã€ã³ã«ç¹å®ã®ãšã©ãŒææã»åŠç颿°ãå°å ¥ãããšã©ãŒãªããžã§ã¯ããããã©ã«ãå€ãè¿ãããã«ããŸãã
- ã©ã€ãã©ãªã掻çšããïŒ é¢æ°åããã°ã©ãã³ã°ã©ã€ãã©ãªã¯ããã°ãã°å ç¢ãªãšã©ãŒåŠçãŠãŒãã£ãªãã£ãæäŸããŸãã
äŸ11ïŒ`reduce`ã䜿çšãããã€ãã©ã€ã³ã§ã®ãšã©ãŒåŠç
function safePipe(...fns) {
return (initialValue) => {
let currentValue = initialValue;
for (const fn of fns) {
try {
currentValue = fn(currentValue);
} catch (error) {
console.error(`Error in function ${fn.name}:`, error);
// Decide how to proceed: break, return error object, etc.
return { error: true, message: error.message };
}
}
return currentValue;
};
}
// ... usage with safePipe ...
ããã«ãããäžã€ã®ã¹ãããã倱æããŠããã·ã¹ãã ã®ä»ã®éšåãäºæããã¯ã©ãã·ã¥ããããšããªããªããŸããããã¯ããããã¯ãŒã¯é å»¶ãããŒã¿ã®å質ã®ã°ãã€ãã«ãã£ãŠãšã©ãŒãããé »ç¹ã«çºçããå¯èœæ§ã®ããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
5. ããã¥ã¡ã³ããšããŒã ã®èŠçŽ
ãã€ãã©ã€ã³æŒç®åã®æçãããã£ãŠããŠããæç¢ºãªããã¥ã¡ã³ããšããŒã ã®èŠçŽã¯ãç¹ã«ã°ããŒãã«ããŒã ã§ã¯äžå¯æ¬ ã§ãããã€ãã©ã€ã³å ã®å颿°ã®ç®çãšããããè¡ãä»®å®ãææžåããŸãããã€ãã©ã€ã³æ§ç¯ã®ããã®äžè²«ããã¹ã¿ã€ã«ã«åæããŠãã ããã
åçŽãªé£éãè¶ ããŠïŒé«åºŠãªåæ
ãã€ãã©ã€ã³æŒç®åã¯é次çãªåæã®ããã®åŒ·åãªããŒã«ã§ãããããã颿°åããã°ã©ãã³ã°ã¯ã次ã®ãããªä»ã®åæãã¿ãŒã³ãæäŸããŠããŸãã
composeïŒå³ããå·ŠãžïŒïŒ ããã¯ãã€ãã©ã€ã³ã®éã§ããcompose(f, g, h)(x)ã¯f(g(h(x)))ã«çžåœããŸããããŒã¿ãæãå åŽã®æäœããå€åŽã«åãã£ãŠã©ã®ããã«å€æãããããèãããšãã«äŸ¿å©ã§ãã- ãã€ã³ãããªãŒã¹ã¿ã€ã«ïŒ ä»ã®é¢æ°ãæäœãã颿°ã§ãæäœå¯Ÿè±¡ã®ããŒã¿ãæç€ºçã«èšåããããšãªããããåçŽãªé¢æ°ãçµã¿åãããŠè€éãªããžãã¯ãæ§ç¯ã§ããŸãã
ãã€ãã©ã€ã³æŒç®åã¯å·Šããå³ãžã®é次å®è¡ã«çŠç¹ãåœãŠãŠããŸããããããã®é¢é£æŠå¿µãçè§£ããããšã§ããšã¬ã¬ã³ããªé¢æ°åæã®ããã®ããå æ¬çãªããŒã«ããããæäŸã§ããŸãã
çµè«
JavaScriptã®ãã€ãã©ã€ã³æŒç®åã¯ãå°æ¥çã«ãã€ãã£ãã§ãµããŒããããããreduceãã«ã¹ã¿ã ãã«ããŒé¢æ°ã®ãããªçŸåšã®ãã¿ãŒã³ãä»ããŠå®è£
ããããã«ããããããæç¢ºã§ä¿å®å¯èœãã€å¹ççãªJavaScriptã³ãŒããæžãäžã§å€§ããªé£èºã衚ããŸããèªç¶ãªå·Šããå³ãžã®ãããŒã§è€éãªé¢æ°ãã§ãŒã³ãå¹çåãããã®èœåã¯ãäžçäžã®éçºè
ã«ãšã£ãŠéåžžã«äŸ¡å€ã®ããããŒã«ã§ãã
ãã€ãã©ã€ã³åæãåãå ¥ããããšã§ã以äžã®ããšãå¯èœã«ãªããŸãã
- ã°ããŒãã«ããŒã ã®ããã«ã³ãŒãã®å¯èªæ§ãåäžãããã
- ä¿å®æ§ãæ¹åãããããã°æéãççž®ããã
- å¥å šãªé¢æ°åããã°ã©ãã³ã°ã®å®è·µãä¿é²ããã
- ããç°¡æœã§è¡šçŸåè±ããªã³ãŒããæžãã
JavaScriptãé²åãç¶ããäžã§ããããã®é«åºŠãªãã¿ãŒã³ãæ¡çšããããšã¯ãçžäºæ¥ç¶ãããã°ããŒãã«ãªéçºç°å¢ã§æåã§ããå ç¢ã§ã¹ã±ãŒã©ãã«ããã€ãšã¬ã¬ã³ããªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãä¿èšŒããŸãã仿¥ãããã€ãã©ã€ã³é¢šã®ãã¿ãŒã³ã詊ããŠã¿ãŠãããªãã®JavaScriptéçºã«æ°ããªã¬ãã«ã®æçããšå¹çæ§ããããããŸãããã