当前位置:首页 > 科技  > 软件

JavaScript模式匹配的未来

来源: 责编: 时间:2023-10-30 17:24:34 369观看
导读"你好,JavaScript!"动手试试。这里有一个超基础的函数叫做 greet,它接受一个带有'ID'和'role'的用户,并根据用户角色返回问候语。听起来简单吗?function greet({id, role}) { if (role == 'user'){ return `Hel

v1k28资讯网——每日最新资讯28at.com

"你好,JavaScript!"

动手试试。这里有一个超基础的函数叫做 greet,它接受一个带有'ID'和'role'的用户,并根据用户角色返回问候语。听起来简单吗?v1k28资讯网——每日最新资讯28at.com

function greet({id, role}) {    if (role == 'user'){        return `Hello User ${id}`;    }    if (role == 'admin'){        return `Hello Admin ${id}`;    }    if (role == 'owner'){        return `Hello Owner ${id}`;    }    throw `Invalid role: ${role}`;}

这很像一个 switch 语句,但我们很难说这完全准确——它笨拙,充斥着讨厌的if 语句,对于一个未定义的角色还有一个错误陷阱。v1k28资讯网——每日最新资讯28at.com

function greet({id, role}) {    switch (role){        case 'user':            return `Hello User ${id}`;        case 'admin':            return `Hello Admin ${id}`;        case 'owner':            return `Hello Owner ${id}`;        default:            throw `Invalid role: ${role}`;    }}

switch 还可以,但这里我们遇到了一个问题--如果不使用一些奇怪的黑客手段,例如在 true 上进行切换,它就无法完成足够的工作。v1k28资讯网——每日最新资讯28at.com

简化复杂性的模式匹配艺术

模式匹配可以结束这种复杂性。想象一个你有一个 when 子句可以救我们摆脱这种冗长的迷宫的世界。v1k28资讯网——每日最新资讯28at.com

简单地说,模式匹配允许我们检查一个输入是否符合一个模式或一个特定的类型。v1k28资讯网——每日最新资讯28at.com

在继续之前,需求注意的——现在看的是一个提议。所以,这可能还不是最终的语法。v1k28资讯网——每日最新资讯28at.com

let greet = match (input) {  when { role: "user" }: `Hello User ${input.id}`,  when { role: "admin" }: `Hello Admin ${input.id}`,  when { role: "owner" }: `Hello Owner ${input.id}`,  _: throw `Invalid role: ${input.role}`,}

在这里,match函数接受输入,when子句检查 input 中的角色是否匹配指定的角色 - user, admin, owner。v1k28资讯网——每日最新资讯28at.com

这样更清晰,不是吗?不再有 if或 switch clutter - 只有一个简洁而干净的表达式。这不仅允许更易读和可维护的代码,而且为基于输入属性的更简单的“行内”决策铺平了道路,使条件、行为和结果非常容易同时阅读。v1k28资讯网——每日最新资讯28at.com

这会改变JavaScript的未来吗?

我真的相信模式匹配可以极大地改善JavaScript的未来。通过直接从Elixir这样的其他语言中获取关键的想法,并与JavaScript的强大灵活性结合,我们肯定可以为“JavaScript之家”增加一个顶石。v1k28资讯网——每日最新资讯28at.com

但是,我希望看到我们最喜欢的语言走得更远,尤其是当模式匹配与函数定义结合使用时。这可能会让我们走出舒适区,但一旦你开始探索它,你就会意识到它所拥有的力量和它带来的简单性。v1k28资讯网——每日最新资讯28at.com

def greet(%{role: "user", id: id}), do: `Hello User #{id}`def greet(%{role: "admin", id: id}), do: `Hello Admin #{id}`def greet(%{role: "owner", id: id}), do: `Hello Owner #{id}`def greet(%{role: _}), do: throw `Invalid role`

在这个 Elixir 代码示例中,我们根据输入重新定义了函数三次。除了它给予的直接清晰性外,解剖这一点,我们注意到它做了两件事——它修剪了句法复杂性,显著减少了理解代码所需的心智负担。v1k28资讯网——每日最新资讯28at.com

希望有一天JavaScript能够实现这种基于模式的函数重载,相信这将带来一些最好的编程体验。就JavaScript的未来而言,作者认为模式匹配是最令人兴奋的前景之一。v1k28资讯网——每日最新资讯28at.com

v1k28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-15880-0.htmlJavaScript模式匹配的未来

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++代码:用 C++ 实现线性拟合

下一篇: 优雅的路由系统:Gorilla Mux

标签:
  • 热门焦点
  • K60至尊版刚预热 一加Ace2 Pro正面硬刚

    Redmi这边刚如火如荼的宣传了K60 Ultra的各种技术和硬件配置,作为竞品的一加也坐不住了。一加中国区总裁李杰发布了两条微博,表示在自家的一加Ace2上早就已经采用了和PixelWo
  • 跑分安卓第一!Redmi K60至尊版8月发布!卢伟冰:目标年度性能之王

    8月5日消息,Redmi K60至尊版将于8月发布,在此前举行的战略发布会上,官方该机将搭载搭载天玑9200+处理器,安兔兔V10跑分超177万分,是目前安卓阵营最高的分数
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top