分享更有价值
被信任是一种快乐

JS语法有C#的switch表达式

文章页正文上

今天小编给大家分享的是JS语法有C#的switch表达式,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。于 C/Java 语系的语言,都有 switch 语法。switch 语法用于多分支是一个标准的用法,但这个分支语法的各分支之间存在穿透性,所以需要break来切断逻辑,这也成为 switch 语法中最重要的一个替在缺陷来源。此外,由于 switch 语句中各 case 的代码是在同一个作用域中,也会对代码造成一些不便。C# 8.0 引入了switch 表达式。C# 的 switch 表达式有着非常丰富的语法元素,可以和模式匹配和解构等语法元素协同工作 —— 这些都不在这里细说,但是对传统的switch 语句进行了一些改进:通过箭头 (=>) 标记处理了 case 和语句之间的一对一关系,不需要 break,不再穿透;作为表达式,可以而且必须返回值;switch 表达式一定要详尽(逻辑一定会走进某一个 case,可以通过弃元模式兜底),否则可能会在运行时引发异常。在 C# 8.0 发布的同年,Java 12 也发布并引入了 switch 表达式预览。Java 的 switch 表达式实现比较简单,就是 switch 语句到 switch 表达式的直接转换,仅支持等值匹配。直到 2023 年 3 月 Java 20 发布,switch 表达式才开始支持模式匹配。相比之下,Kotlin 的 when 表达式走在了前面。在这个问题上 JavaScript 似乎走在了后面,不过在语言提供 switch 表达式之前,我们可以尝试自己造个轮子。思路当然是参考策略模式。假设有一个列表,这个列表里的每个元素都包含了两个因素:第一个用于判断是否命中,第二个是个函数,得到一个计算结果。然后写一个循环遍历列表的每个元素,一旦某个元素命中,就执行元素携带的函数获得结果,中断循环,返回结果。如果列表的最后一个元素必定命中,那么这个列表就是“详尽”的。那么这个when函数可能会这样写(switch是关键字,所以使用when来作为函数名):这里我们假设每个情况 (case) 都含有is方法用于判断是否命中,用run方法保存命中后需要执行的操作。相应地,我们可以经典的“拿分算等级”来进行测试:在calcGrade实现中when的 case 列表最后一项采用了“永真”断言,所以走到这一项的时候一定会命中,从逻辑上来永远不会触发 Error。如果是非“详尽”的情况列表,就有可能触发 Error。不过现在从测试代码中就发现了两个问题:is断言是采用函数的形式,不能简单地直接按值匹配;从调用形式上来说,score和后面的 case 元素是同级的,形式上区分不明显;每次都要写isrun,条件多了写起来也烦。继续改进 ——为什么兜底断言必须使用一个函数呢?因为true值也有可能是对应一种预想的分支情况。由于这个when是通过语义来实现而不是通过语法来实现的,所以这里没办法定义一个安全的兜底断言语法,只有用断言函数会相对安全。至此为止我们已经基本实现了 switch 表达式 (when),把它升级成 TypeScript这段代码当然可以直接用,但是如果使用 npm 可能会更方便一点:关于JS语法有C#的switch表达式就分享到这里了,希望以上内容可以对大家有一定的参考价值,可以学以致用。如果喜欢本篇文章免费云主机、域名,不妨把它分享出去让更多的人看到。

相关推荐: 分析Promise链式调用

本篇内容介绍了“分析Promise链式调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!上一节中,实现了 Promise 的基础版本:但链式调用,只是在 the…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册