成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JavaScript模式匹配的未來

開發 前端
今天,揭開一個令人興奮的功能的面紗,這個功能通常在 Elixir 這樣的函數式編程語言中看到,現在被提議用于 JavaScript ——模式匹配。

"你好,JavaScript!"

動手試試。這里有一個超基礎的函數叫做 greet,它接受一個帶有'ID'和'role'的用戶,并根據用戶角色返回問候語。聽起來簡單嗎?

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 語句,對于一個未定義的角色還有一個錯誤陷阱。

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 上進行切換,它就無法完成足夠的工作。

簡化復雜性的模式匹配藝術

模式匹配可以結束這種復雜性。想象一個你有一個 when 子句可以救我們擺脫這種冗長的迷宮的世界。

簡單地說,模式匹配允許我們檢查一個輸入是否符合一個模式或一個特定的類型。

在繼續之前,需求注意的——現在看的是一個提議。所以,這可能還不是最終的語法。

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。

這樣更清晰,不是嗎?不再有 if或 switch clutter - 只有一個簡潔而干凈的表達式。這不僅允許更易讀和可維護的代碼,而且為基于輸入屬性的更簡單的“行內”決策鋪平了道路,使條件、行為和結果非常容易同時閱讀。

這會改變JavaScript的未來嗎?

我真的相信模式匹配可以極大地改善JavaScript的未來。通過直接從Elixir這樣的其他語言中獲取關鍵的想法,并與JavaScript的強大靈活性結合,我們肯定可以為“JavaScript之家”增加一個頂石。

但是,我希望看到我們最喜歡的語言走得更遠,尤其是當模式匹配與函數定義結合使用時。這可能會讓我們走出舒適區,但一旦你開始探索它,你就會意識到它所擁有的力量和它帶來的簡單性。

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 代碼示例中,我們根據輸入重新定義了函數三次。除了它給予的直接清晰性外,解剖這一點,我們注意到它做了兩件事——它修剪了句法復雜性,顯著減少了理解代碼所需的心智負擔。

希望有一天JavaScript能夠實現這種基于模式的函數重載,相信這將帶來一些最好的編程體驗。就JavaScript的未來而言,作者認為模式匹配是最令人興奮的前景之一。

責任編輯:姜華 來源: 大遷世界
相關推薦

2022-08-29 15:26:58

MySQLSQL模式

2015-11-23 10:07:19

Swift模式匹配

2012-02-16 09:10:31

JavaScript

2012-12-18 10:03:22

JavaScriptWebJS

2013-11-28 09:43:46

JavaScriptWeb

2019-06-26 08:20:19

JavaScriptWeb開發

2020-12-22 09:32:36

JavaScripMixin mixins

2012-10-29 11:16:13

2009-09-09 11:37:08

Scala的模式匹配

2010-06-04 10:14:14

MySQL匹配模式

2017-04-10 10:35:02

JavaScript框架

2010-07-26 10:51:26

Perl模式匹配

2010-07-15 17:58:31

Perl模式

2010-07-26 11:02:19

Perl模式匹配

2023-11-28 13:20:00

Rust匹配枚舉

2016-02-19 15:39:13

統一通信

2011-12-12 20:28:53

移動互聯網

2010-09-13 09:18:22

JavaScript模塊模式

2021-02-19 14:07:03

JavaScript編程開發

2012-12-25 09:38:41

JavaScript設計模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩电影一区二区 | 色婷婷综合久久久中字幕精品久久 | 一区二区免费看 | 男人的天堂一级片 | 中文精品视频 | 国产黄色网址在线观看 | 日韩α片 | 成人在线视频一区 | 中文字幕av免费 | 91av国产在线视频 | 久久亚洲一区二区 | 亚洲性在线 | 精久久久久 | 久久综合激情 | 亚洲三区在线观看 | 在线观看中文字幕亚洲 | 亚洲性在线 | xxxxxx国产 | 91网站在线看 | 亚洲一区二区三区久久久 | 久久久久无码国产精品一区 | 欧美国产日韩精品 | 日韩电影中文字幕 | 在线国产欧美 | 日韩中文字幕在线观看 | 久久69精品久久久久久国产越南 | 婷婷中文字幕 | 韩日三级 | 91一区二区 | 蜜桃毛片 | 懂色一区二区三区免费观看 | 国产激情视频在线免费观看 | 一级大黄| 国产成人精品久久二区二区91 | 精品综合| 欧美无乱码久久久免费午夜一区 | 91麻豆精品一区二区三区 | 久久久久久亚洲 | www97影院| 免费久久视频 | 免费视频二区 |