JavaScriptã§ææ¡äžã®`when`å¥ãçšãããã¿ãŒã³ãããã³ã°ã䜿ããããã¯ãªãŒã³ã§è¡šçŸåè±ãããã€å ç¢ãªæ¡ä»¶ããžãã¯ãèšè¿°ããããã®ãã°ããŒãã«éçºè åãç·åã¬ã€ãã
JavaScriptã®æ¬¡ãªãããã³ãã£ã¢ïŒãã¿ãŒã³ãããã³ã°ã®ã¬ãŒããã§ãŒã³ã§è€éãªããžãã¯ããã¹ã¿ãŒãã
çµ¶ããé²åãããœãããŠã§ã¢éçºã®äžçã«ãããŠãããã¯ãªãŒã³ã§ãèªã¿ããããä¿å®æ§ã®é«ãã³ãŒããæ±ããããšã¯æ®éçãªç®æšã§ããäœå幎ãã®éãJavaScriptéçºè ã¯æ¡ä»¶ããžãã¯ãæ±ãããã«`if/else`æã`switch`ã±ãŒã¹ã«äŸåããŠããŸããããããã®æ§æã¯å¹æçã§ããäžæ¹ãããã«æ±ãã«ãããªããæ·±ããã¹ãããã³ãŒããæªåé«ããç Žæ» ã®ãã©ããããããããŠè¿œè·¡ãå°é£ãªããžãã¯ã«ã€ãªããå¯èœæ§ããããŸãããã®èª²é¡ã¯ãæ¡ä»¶ãåçŽã§ããããšã®å°ãªããè€éãªå®äžçã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã«å¢å€§ããŸãã
ããã«ãJavaScriptã«ãããè€éãªããžãã¯ã®æ±ãæ¹ãåå®çŸ©ãããã©ãã€ã ã·ãããç»å ŽããŸããããããã¿ãŒã³ãããã³ã°ã§ããå ·äœçã«ã¯ããã®æ°ããã¢ãããŒãã®ç䟡ã¯ãææ¡äžã®`when`å¥ãçšããã¬ãŒãåŒãã§ãŒã³ãšçµã¿åãããããšã§å®å šã«çºæ®ãããŸãããã®èšäºã§ã¯ããã®åŒ·åãªæ©èœãæ·±ãæãäžããè€éãªæ¡ä»¶ããžãã¯ããã°ãæ··ä¹±ã®åå ãããã¢ããªã±ãŒã·ã§ã³ã«ãããæç¢ºããšå ç¢æ§ã®æ±ãžãšå€ããæ¹æ³ãæ¢ããŸãã
ããªããã°ããŒãã«ãªEã³ããŒã¹ãã©ãããã©ãŒã ã®ã¹ããŒã管çã·ã¹ãã ãèšèšããã¢ãŒããã¯ãã§ãããè€éãªããžãã¹ã«ãŒã«ãæã€æ©èœãæ§ç¯ããéçºè ã§ããããã®æŠå¿µãçè§£ããããšã¯æ¬¡äžä»£ã®JavaScriptãæžãããã®éµãšãªããŸãã
ãŸããJavaScriptã«ããããã¿ãŒã³ãããã³ã°ãšã¯äœãïŒ
ã¬ãŒãå¥ã®äŸ¡å€ãçè§£ããåã«ããã®åå°ãšãªã£ãŠãããã®ãçè§£ããªããã°ãªããŸããããã¿ãŒã³ãããã³ã°ã¯ãçŸåšTC39ïŒJavaScriptãæšæºåããå§å¡äŒïŒã§ã¹ããŒãž1ã®ææ¡ã§ãããåãªããè¶ åŒ·åãª`switch`æããã¯ããã«è¶ ãããã®ã§ãã
ãã®æ žå¿ã«ãããŠããã¿ãŒã³ãããã³ã°ã¯å€ããã¿ãŒã³ã«å¯ŸããŠãã§ãã¯ããã¡ã«ããºã ã§ããå€ã®æ§é ããã¿ãŒã³ã«äžèŽããã°ãã³ãŒããå®è¡ã§ããå€ãã®å ŽåãããŒã¿èªäœããå€ã䟿å©ã«åå²ä»£å ¥ããããšãã§ããŸããããã«ãããçŠç¹ã¯ããã®å€ã¯XãšçãããïŒããšããåããããããã®å€ã¯Yã®åœ¢ç¶ãæã£ãŠãããïŒããšããåããžãšç§»ããŸãã
å žåçãªAPIã¬ã¹ãã³ã¹ãªããžã§ã¯ããèããŠã¿ãŸãããïŒ
const apiResponse = { status: 200, data: { userId: 123, name: 'Alex' } };
åŸæ¥ã®æ¹æ³ã§ã¯ããã®ç¶æ ããã®ããã«ãã§ãã¯ãããããããŸããïŒ
if (apiResponse.status === 200 && apiResponse.data) {
const user = apiResponse.data;
handleSuccess(user);
} else if (apiResponse.status === 404) {
handleNotFound();
} else {
handleGenericError();
}
ææ¡ãããŠãããã¿ãŒã³ãããã³ã°æ§æã¯ããããå€§å¹ ã«ç°¡ç¥åã§ããŸãïŒ
match (apiResponse) {
with ({ status: 200, data: user }) -> handleSuccess(user),
with ({ status: 404 }) -> handleNotFound(),
with ({ status: 400, error: msg }) -> handleBadRequest(msg),
with _ -> handleGenericError()
}
ããã«ãããå©ç¹ã«æ³šç®ããŠãã ããïŒ
- 宣èšçãªã¹ã¿ã€ã«ïŒã³ãŒãã¯ãããŒã¿ãã©ã®ããã«åœä»€çã«ãã§ãã¯ãããã§ã¯ãªããããŒã¿ãã©ã®ãããªãã®ã§ããã¹ãããèšè¿°ããŸãã
- çµ±åãããåå²ä»£å ¥ïŒæåã±ãŒã¹ã§ã¯ã`data`ããããã£ãçŽæ¥`user`倿°ã«æçžãããŸãã
- æç¢ºãïŒæå³ãäžç®ã§ããããŸãããã¹ãŠã®å¯èœãªããžãã¯ãã¹ãåãå Žæã«é 眮ãããèªã¿ãããã§ãã
ããããããã¯ãŸã 衚é¢ããªãã£ãã«ãããŸãããããããžãã¯ãæ§é ããªãã©ã«å€ä»¥äžã®ãã®ã«äŸåããå Žåã¯ã©ãã§ããããïŒãŠãŒã¶ãŒã®æš©éã¬ãã«ãç¹å®ã®ãããå€ãè¶ ããŠãããããããã¯æ³šæåèšãç¹å®ã®éé¡ãè¶ ããŠãããã確èªããå¿ èŠãããå Žåã¯ã©ãã§ãããïŒããã§åºæ¬çãªãã¿ãŒã³ãããã³ã°ã¯åäžè¶³ãšãªããã¬ãŒãåŒãèŒããæŸã¡ãŸãã
ã¬ãŒãåŒã®å°å ¥ïŒ`when`å¥
ã¬ãŒãåŒã¯ãææ¡ã§ã¯`when`ããŒã¯ãŒããä»ããŠå®è£ ããããã¿ãŒã³ããããããããã«çã§ãªããã°ãªããªã远å ã®æ¡ä»¶ã§ããããã¯éçªã®ããã«æ©èœããæ§é ãæ£ãããã€ä»»æã®JavaScriptåŒã`true`ãšè©äŸ¡ãããå Žåã«ã®ã¿ããããèš±å¯ããŸãã
æ§æã¯çŸããã·ã³ãã«ã§ãïŒ
with pattern when (condition) -> result
ç°¡åãªäŸãèŠãŠã¿ãŸããããæ°å€ãåé¡ããããšããŸãïŒ
const value = 42;
const category = match (value) {
with x when (x < 0) -> 'Negative',
with 0 -> 'Zero',
with x when (x > 0 && x <= 10) -> 'Small Positive',
with x when (x > 10) -> 'Large Positive',
with _ -> 'Not a number'
};
// category 㯠'Large Positive' ã«ãªããŸã
ãã®äŸã§ã¯ã`x`ã¯`value`ïŒ42ïŒã«æçžãããŸããæåã®`when`å¥`(x < 0)`ã¯åœã§ãã`0`ãšã®ãããã¯å€±æããŸãã3çªç®ã®å¥`(x > 0 && x <= 10)`ã¯åœã§ããæåŸã«ã4çªç®ã®å¥ã®ã¬ãŒã`(x > 10)`ãçãšè©äŸ¡ãããããããã¿ãŒã³ããããããåŒã¯'Large Positive'ãè¿ããŸãã
`when`å¥ã¯ããã¿ãŒã³ãããã³ã°ãåçŽãªæ§é ãã§ãã¯ãããããããæ±ºå®ããããã«ä»»æã®æå¹ãªJavaScriptåŒãå®è¡ã§ããæŽç·Žãããããžãã¯ãšã³ãžã³ãžãšæè¯ãããŸãã
ãã§ãŒã³ã®åïŒè€éã§éè€ããæ¡ä»¶ã®åŠç
ã¬ãŒãåŒã®çã®åã¯ãè€éãªããžãã¹ã«ãŒã«ãã¢ãã«åããããã«ããããé£çµãããšãã«çŸããŸãã`if...else if...else`ãã§ãŒã³ã®ããã«ã`match`ãããã¯å ã®å¥ã¯æžãããé ã«è©äŸ¡ãããŸãããã¿ãŒã³ãšãã®`when`ã¬ãŒãã®äž¡æ¹ãå®å šã«äžèŽããæåã®å¥ãå®è¡ãããè©äŸ¡ã¯åæ¢ããŸãã
ãã®é åºä»ããããè©äŸ¡ã¯éåžžã«éèŠã§ããããã«ãããæææ±ºå®ã®éå±€ãäœæããæãå ·äœçãªã±ãŒã¹ãæåã«åŠçããããäžè¬çãªã±ãŒã¹ã«ãã©ãŒã«ããã¯ããããšãã§ããŸãã
å®è·µäŸ1ïŒãŠãŒã¶ãŒèªèšŒãšèªå¯
ç°ãªããŠãŒã¶ãŒããŒã«ãšã¢ã¯ã»ã¹ã«ãŒã«ãæã€ã·ã¹ãã ãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒãªããžã§ã¯ãã¯æ¬¡ã®ããã«ãªããŸãïŒ
const user = {
id: 1,
role: 'editor',
isActive: true,
lastLogin: new Date('2023-10-26T10:00:00Z'),
permissions: ['create', 'edit']
};
ã¢ã¯ã»ã¹ã決å®ããããã®ããžãã¹ããžãã¯ã¯æ¬¡ã®éãã§ãïŒ
- éã¢ã¯ãã£ããªãŠãŒã¶ãŒã¯å³åº§ã«ã¢ã¯ã»ã¹ãæåŠãããã¹ãã§ãã
- 管çè ã¯ãä»ã®ããããã£ã«é¢ä¿ãªãå®å šãªã¢ã¯ã»ã¹æš©ãæã¡ãŸãã
- 'publish'æš©éãæã€ç·šéè ã¯ãå ¬éã¢ã¯ã»ã¹æš©ãæã¡ãŸãã
- æšæºã®ç·šéè ã¯ãç·šéã¢ã¯ã»ã¹æš©ãæã¡ãŸãã
- ãã以å€ã®ãŠãŒã¶ãŒã¯èªã¿åãå°çšã¢ã¯ã»ã¹æš©ãæã¡ãŸãã
ããããã¹ããã`if/else`ã§å®è£ ãããšãç ©éã«ãªããã¡ã§ããã¬ãŒãåŒãã§ãŒã³ã䜿ãã°ãããã«ã¯ãªãŒã³ã«ãªããèŠãŠã¿ãŸãããïŒ
const getAccessLevel = (user) => match (user) {
// æãå
·äœçã§éèŠãªã«ãŒã«ãæåã«ïŒéã¢ã¯ãã£ãç¶æ
ããã§ãã¯
with { isActive: false } -> 'Access Denied: Account Inactive',
// 次ã«ãæé«ã®æš©éããã§ãã¯
with { role: 'admin' } -> 'Full Administrative Access',
// ããå
·äœçãª'editor'ã®ã±ãŒã¹ãã¬ãŒãã§åŠç
with { role: 'editor' } when (user.permissions.includes('publish')) -> 'Publishing Access',
// äžè¬çãª'editor'ã®ã±ãŒã¹ãåŠç
with { role: 'editor' } -> 'Standard Editing Access',
// ä»ã®èªèšŒæžã¿ãŠãŒã¶ãŒã®ããã®ãã©ãŒã«ããã¯
with _ -> 'Read-Only Access'
};
ãã®ã³ãŒãã¯åã«çãã ãã§ãªããããžãã¹ã«ãŒã«ãèªã¿ããã宣èšçãªåœ¢åŒã«çŽæ¥å€æãããã®ã§ããé åºãéèŠã§ãïŒããäžè¬çãª`with { role: 'editor' }`å¥ã`when`ã¬ãŒãä»ãã®å¥ã®åã«çœ®ããšãå ¬éæš©éãæã€ç·šéè ã¯ããåçŽãªã±ãŒã¹ã«å ã«ãããããŠããŸãããã'Publishing Access'ã¬ãã«ãåŸãããšã¯æ±ºããŠãããŸããã
å®è·µäŸ2ïŒã°ããŒãã«Eã³ããŒã¹ã®æ³šæåŠç
ã°ããŒãã«Eã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã®ããè€éãªã·ããªãªãèããŠã¿ãŸããããæ³šæåèšãé éå åœã顧客ã¹ããŒã¿ã¹ã«åºã¥ããŠéæãèšç®ããããã¢ãŒã·ã§ã³ãé©çšããå¿ èŠããããŸãã
`order`ãªããžã§ã¯ãã¯æ¬¡ã®ããã«ãªããŸãïŒ
const order = {
orderId: 'XYZ-123',
customer: { id: 456, status: 'premium' },
total: 120.50,
destination: { country: 'JP', region: 'Kanto' },
itemCount: 3
};
ã«ãŒã«ã¯æ¬¡ã®éãã§ãïŒ
- æ¥æ¬ã®ãã¬ãã¢ã 顧客ã¯ã10,000åïŒçŽ70ãã«ïŒä»¥äžã®æ³šæã§éé䟿ãç¡æã«ãªããŸãã
- 200ãã«ãè¶ ããæ³šæã¯ãå šäžçã§éæãç¡æã«ãªããŸãã
- EU諞åœãžã®æ³šæã¯ãäžåŸ15ãŠãŒãã®éæãããããŸãã
- åœå ïŒç±³åœïŒã®50ãã«ä»¥äžã®æ³šæã¯ãæšæºéæãç¡æã«ãªããŸãã
- ãã®ä»ãã¹ãŠã®æ³šæã¯ãåçéæèšç®æ©ã䜿çšããŸãã
ãã®ããžãã¯ã«ã¯ãè€æ°ã§ãæã«ã¯éè€ããããããã£ãé¢ãã£ãŠããŸããã¬ãŒããã§ãŒã³ãæã€`match`ãããã¯ã¯ãããã管çããããããŸãïŒ
const getShippingInfo = (order) => match (order) {
// æãå
·äœçãªã«ãŒã«ïŒç¹å®ã®åœã®ãã¬ãã¢ã 顧客ã§ãæäœåèšéé¡ãæºããå Žå
with { customer: { status: 'premium' }, destination: { country: 'JP' }, total: t } when (t > 70) -> { type: 'Express', cost: 0, notes: 'æ¥æ¬ãžã®ãã¬ãã¢ã éæç¡æ' },
// äžè¬çãªé«é¡æ³šæã«ãŒã«
with { total: t } when (t > 200) -> { type: 'Standard', cost: 0, notes: 'å
šäžçéæç¡æ' },
// EUåãã®å°åã«ãŒã«
with { destination: { country: c } } when (['DE', 'FR', 'ES', 'IT'].includes(c)) -> { type: 'Standard', cost: 15, notes: 'EUäžåŸæé' },
// åœå
ïŒç±³åœïŒã®é
éãªãã¡ãŒ
with { destination: { country: 'US' }, total: t } when (t > 50) -> { type: 'Standard', cost: 0, notes: 'åœå
éæç¡æ' },
// ãã®ä»ãã¹ãŠã®ããã®ãã©ãŒã«ããã¯
with _ -> { type: 'Calculated', cost: calculateDynamicRate(order.destination), notes: 'æšæºåœéæé' }
};
ãã®äŸã¯ããã¿ãŒã³åå²ä»£å ¥ãšã¬ãŒããçµã¿åãããããšã®çã®åã瀺ããŠããŸãããªããžã§ã¯ãã®äžéšïŒäŸïŒ`{ destination: { country: c } }`ïŒãåå²ä»£å ¥ããªããããŸã£ããå¥ã®éšåïŒäŸïŒ`{ total: t }`ããã®`when (t > 50)`ïŒã«åºã¥ããŠã¬ãŒããé©çšã§ããŸãããã®ããŒã¿æœåºãšæ€èšŒã®åå± ã¯ãåŸæ¥ã®`if/else`æ§é ã§ã¯ã¯ããã«åé·ã«æ±ããããã®ã§ãã
ã¬ãŒãåŒ vs. åŸæ¥ã®`if/else`ãš`switch`
ãã®å€åãååã«çè§£ããããã«ããã©ãã€ã ãçŽæ¥æ¯èŒããŠã¿ãŸãããã
å¯èªæ§ãšè¡šçŸå
è€éãª`if/else`ãã§ãŒã³ã¯ããã°ãã°å€æ°ãžã®ã¢ã¯ã»ã¹ãç¹°ãè¿ããæ¡ä»¶ãšå®è£ ã®è©³çŽ°ãæ··åšãããããšã匷å¶ããŸãããã¿ãŒã³ãããã³ã°ã¯ããäœããïŒãã¿ãŒã³ïŒãããªããïŒã¬ãŒãïŒããããŠãã©ã®ããã«ãïŒçµæïŒãåé¢ããŸãã
åŸæ¥ã®`if/else`å°çïŒ
function processRequest(req) {
if (req.method === 'POST') {
if (req.body && req.body.data) {
if (req.headers['content-type'] === 'application/json') {
if (req.user && req.user.isAuthenticated) {
// ... å®éã®ããžãã¯ã¯ããã«
} else { /* æªèªèšŒã®åŠç */ }
} else { /* ééã£ãã³ã³ãã³ãã¿ã€ãã®åŠç */ }
} else { /* ããã£ããªãå Žåã®åŠç */ }
} else if (req.method === 'GET') { /* ... */ }
}
ã¬ãŒãä»ããã¿ãŒã³ãããã³ã°ïŒ
function processRequest(req) {
return match (req) {
with { method: 'POST', body: { data }, user } when (user?.isAuthenticated && req.headers['content-type'] === 'application/json') -> {
return handleCreation(data, user);
},
with { method: 'POST' } -> {
return createBadRequestResponse('Invalid POST request');
},
with { method: 'GET', params: { id } } -> {
return handleRead(id);
},
with _ -> createMethodNotAllowedResponse()
};
}
`match`ããŒãžã§ã³ã¯ãããã©ããã§ããã宣èšçã§ããããã°ãæ¡åŒµãã¯ããã«ç°¡åã§ãã
ããŒã¿ã®åå²ä»£å ¥ãšæçž
ãã¿ãŒã³ãããã³ã°ã®äººéå·¥åŠçãªå€§ããªå©ç¹ã¯ãããŒã¿ãåå²ä»£å ¥ããæçžããã倿°ãã¬ãŒãå¥ãšçµæå¥ã§çŽæ¥äœ¿çšã§ããããšã§ãã`if`æã§ã¯ããŸãããããã£ã®ååšããã§ãã¯ããæ¬¡ã«ãããã«ã¢ã¯ã»ã¹ããŸãããã¿ãŒã³ãããã³ã°ã¯ããã®äž¡æ¹ã1ã€ã®ãšã¬ã¬ã³ããªã¹ãããã§è¡ããŸãã
äžã®äŸã§ã`data`ãš`id`ã`req`ãªããžã§ã¯ãããæ¥œã«æœåºãããå¿ èŠãªå Žæã§æ£ç¢ºã«å©çšå¯èœã«ãªã£ãããšã«æ³šç®ããŠãã ããã
ç¶²çŸ æ§ãã§ãã¯
æ¡ä»¶ããžãã¯ã«ãããäžè¬çãªãã°ã®åå ã¯ãå¿ããããã±ãŒã¹ã§ããJavaScriptã®ææ¡ã§ã¯ã³ã³ãã€ã«æã®ç¶²çŸ æ§ãã§ãã¯ã¯çŸ©åä»ããããŠããŸããããããã¯éçè§£æããŒã«ïŒTypeScriptããªã³ã¿ãŒãªã©ïŒã容æã«å®è£ ã§ããæ©èœã§ãã`with _`ãšããå æ¬çãªã±ãŒã¹ã¯ãæå³çã«ä»ã®ãã¹ãŠã®å¯èœæ§ãåŠçããŠããããšãæç€ºçã«ããã·ã¹ãã ã«æ°ããç¶æ ã远å ãããã«ããããããããžãã¯ããããåŠçããããã«æŽæ°ãããªããšãããšã©ãŒãé²ããŸãã
é«åºŠãªãã¯ããã¯ãšãã¹ããã©ã¯ãã£ã¹
ã¬ãŒãåŒãã§ãŒã³ãçã«ãã¹ã¿ãŒããããã«ã¯ããããã®é«åºŠãªæŠç¥ãæ€èšããŠãã ããã
1. é åºãéèŠïŒå ·äœçããäžè¬çãž
ãããé»éåŸã§ããåžžã«æãå ·äœçã§å¶çŽã®å³ããå¥ã`match`ãããã¯ã®å é ã«é 眮ããŠãã ããã詳现ãªãã¿ãŒã³ãšå¶çŽã®å³ãã`when`ã¬ãŒããæã€å¥ã¯ãåãããŒã¿ã«ãããããå¯èœæ§ã®ããããäžè¬çãªå¥ã®åã«æ¥ãã¹ãã§ãã
2. ã¬ãŒãã¯çŽç²ã§å¯äœçšããªãããã«ä¿ã€
`when`å¥ã¯çŽç²é¢æ°ã§ããã¹ãã§ãïŒåãå ¥åãäžããããã°ãåžžã«åãããŒã«å€ãçæãã芳枬å¯èœãªå¯äœçšïŒAPIåŒã³åºããã°ããŒãã«å€æ°ã®å€æŽãªã©ïŒãæã€ã¹ãã§ã¯ãããŸããããã®ä»äºã¯æ¡ä»¶ããã§ãã¯ããããšã§ãããã¢ã¯ã·ã§ã³ãå®è¡ããããšã§ã¯ãããŸãããå¯äœçšã¯çµæåŒïŒ`->`ã®åŸã®éšåïŒã«å±ããŸãããã®ååã«éåãããšãã³ãŒããäºæž¬äžå¯èœã«ãªãããããã°ãå°é£ã«ãªããŸãã
3. è€éãªã¬ãŒãã«ã¯ãã«ããŒé¢æ°ã䜿çšãã
ã¬ãŒãããžãã¯ãè€éãªå Žåã¯ã`when`å¥ãæ£ããããªãã§ãã ããããã®ããžãã¯ããååã®è¯ããã«ããŒé¢æ°ã«ã«ãã»ã«åããŸããããã«ãããå¯èªæ§ãšåå©çšæ§ãåäžããŸãã
èªã¿ã«ããäŸïŒ
with { event: 'purchase', timestamp: t } when (new Date().getTime() - new Date(t).getTime() < 60000 && someOtherCondition) -> ...
èªã¿ãããäŸïŒ
const isRecentPurchase = (event) => {
const oneMinuteAgo = new Date().getTime() - 60000;
return new Date(event.timestamp).getTime() > oneMinuteAgo && someOtherCondition;
};
...
with event when (isRecentPurchase(event)) -> ...
4. ã¬ãŒããè€éãªãã¿ãŒã³ãšçµã¿åããã
çµã¿åãããããšãæããªãã§ãã ãããæã匷åãªå¥ã¯ãæ·±ãæ§é çåå²ä»£å ¥ãšæ£ç¢ºãªã¬ãŒãå¥ãçµã¿åããããã®ã§ããããã«ãããã¢ããªã±ãŒã·ã§ã³å ã®éåžžã«ç¹å®ã®ããŒã¿åœ¢ç¶ãšç¶æ ãç¹å®ããããšãã§ããŸãã
// 3æ¥ä»¥äžæªè§£æ±ºã®ãè«æ±ãéšéã®VIPãŠãŒã¶ãŒã®ãµããŒããã±ããã«ãããããã
with { user: { status: 'vip' }, department: 'billing', created: c } when (isOlderThan(c, 3, 'days')) -> escalateToTier2(ticket)
ã³ãŒãã®æç¢ºãã«é¢ããã°ããŒãã«ãªèŠç¹
ç°ãªãæåãã¿ã€ã ãŸãŒã³ãè¶ããŠåãåœéçãªããŒã ã«ãšã£ãŠãã³ãŒãã®æç¢ºãã¯èŽ æ²¢åã§ã¯ãªããå¿ éåã§ããè€éã§åœä»€çãªã³ãŒãã¯è§£éãé£ããå Žåããããç¹ã«ãã¹ãããæ¡ä»¶å¥ã®ãã¥ã¢ã³ã¹ã«èŠåŽããå¯èœæ§ã®ããéãã€ãã£ãã®è±èªè©±è ã«ãšã£ãŠã¯ãªãããã§ãã
ãã¿ãŒã³ãããã³ã°ã¯ããã®å®£èšçã§èŠèŠçãªæ§é ã«ãããèšèªã®å£ããã广çã«ä¹ãè¶ããŸãã`match`ãããã¯ã¯ççå€è¡šã®ãããªãã®ã§ãâãã¹ãŠã®å¯èœãªå ¥åãšããã«å¯Ÿå¿ããåºåãæç¢ºã§æ§é åãããæ¹æ³ã§ç€ºããŸãããã®èªå·±ææžåã®æ§è³ªã¯ãææ§ããæžãããã³ãŒãããŒã¹ãã°ããŒãã«ãªéçºã³ãã¥ããã£ã«ãšã£ãŠããå æ¬çã§ã¢ã¯ã»ã¹ãããããã®ã«ããŸãã
çµè«ïŒæ¡ä»¶ããžãã¯ã®ãã©ãã€ã ã·ãã
ãŸã ææ¡æ®µéã§ãããJavaScriptã®ã¬ãŒãåŒä»ããã¿ãŒã³ãããã³ã°ã¯ãèšèªã®è¡šçŸåã«ãããæãéèŠãªé²æ©ã®äžã€ã衚ããŠããŸããããã¯ãäœå幎ã«ãããã£ãŠç§ãã¡ã®ã³ãŒããæ¯é ããŠãã`if/else`æã`switch`æã«ä»£ãããå ç¢ã§ã宣èšçã§ãã¹ã±ãŒã©ãã«ãªä»£æ¿ææ®µãæäŸããŸãã
ã¬ãŒãåŒãã§ãŒã³ããã¹ã¿ãŒããããšã§ã以äžã®ããšãå¯èœã«ãªããŸãïŒ
- è€éãªããžãã¯ããã©ããã«ããïŒæ·±ããã¹ããæé€ãããã©ããã§èªã¿ãããæ±ºå®æšãäœæããŸãã
- èªå·±ææžåã³ãŒããæžãïŒã³ãŒããããžãã¹ã«ãŒã«ã®çŽæ¥çãªåæ ã«ããŸãã
- ãã°ãæžããïŒãã¹ãŠã®è«çãã¹ãæç€ºçã«ããããè¯ãéçè§£æãå¯èœã«ããããšã§ã
- ããŒã¿æ€èšŒãšåå²ä»£å ¥ãçµã¿åãããïŒããŒã¿ã®åœ¢ç¶ãšç¶æ ã1ã€ã®æäœã§ãšã¬ã¬ã³ãã«ãã§ãã¯ããŸãã
éçºè ãšããŠããã¿ãŒã³ã§èãå§ããæãæ¥ãŸãããå ¬åŒã®TC39ææ¡ã調ã¹ãBabelãã©ã°ã€ã³ã䜿ã£ãŠå®éšããæ¡ä»¶ããžãã¯ããã¯ãè§£ãã»ããã¹ãè€éãªãŠã§ãã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®æ¯ãèãã®æç¢ºã§è¡šçŸåè±ããªããããšãªãæªæ¥ã«åããããšããå§ãããŸãã