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

JavaScript模式匹配的未来

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

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

"你好,JavaScript!"

动手试试。这里有一个超基础的函数叫做 greet,它接受一个带有'ID'和'role'的用户,并根据用户角色返回问候语。听起来简单吗?lJ828资讯网——每日最新资讯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 语句,对于一个未定义的角色还有一个错误陷阱。lJ828资讯网——每日最新资讯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 上进行切换,它就无法完成足够的工作。lJ828资讯网——每日最新资讯28at.com

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

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

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

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

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

这会改变JavaScript的未来吗?

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

但是,我希望看到我们最喜欢的语言走得更远,尤其是当模式匹配与函数定义结合使用时。这可能会让我们走出舒适区,但一旦你开始探索它,你就会意识到它所拥有的力量和它带来的简单性。lJ828资讯网——每日最新资讯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 代码示例中,我们根据输入重新定义了函数三次。除了它给予的直接清晰性外,解剖这一点,我们注意到它做了两件事——它修剪了句法复杂性,显著减少了理解代码所需的心智负担。lJ828资讯网——每日最新资讯28at.com

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

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

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

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

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

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

标签:
  • 热门焦点
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 分享六款相见恨晚的PPT模版网站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS网站旨在为全球Office用户提供丰富的高品质原创PPT模板、实用文档、数据图表及个性化定制服务。优点:OfficePLUS是微软官方网站,囊括PPT模板、Word模
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现“美团直播”的固定入口。在直播聚合页面,外卖“神枪手”直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 回归OPPO两年,一加赢了销量,输了品牌

    成为OPPO旗下主打性能的先锋品牌后,一加屡创佳绩。今年618期间,一加手机全渠道销量同比增长362%,凭借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top