最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

探索JavaScript未來(lái)模式匹配的引入分析

 更新時(shí)間:2023年10月31日 08:58:46   作者:王大冶  
這篇文章主要來(lái)帶大家探索JavaScript的未來(lái),關(guān)于模式匹配的引入為編程體驗(yàn)帶來(lái)革命性變化分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

今天,揭開(kāi)一個(gè)令人興奮的功能的面紗,這個(gè)功能通常在 Elixir 這樣的函數(shù)式編程語(yǔ)言中看到,現(xiàn)在被提議用于 JavaScript ——模式匹配。

"你好,JavaScript!"

動(dòng)手試試。這里有一個(gè)超基礎(chǔ)的函數(shù)叫做 greet,它接受一個(gè)帶有'ID'和'role'的用戶,并根據(jù)用戶角色返回問(wèn)候語(yǔ)。聽(tīng)起來(lái)簡(jiǎn)單嗎?

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}`;
}

這很像一個(gè) switch 語(yǔ)句,但我們很難說(shuō)這完全準(zhǔn)確——它笨拙,充斥著討厭的if 語(yǔ)句,對(duì)于一個(gè)未定義的角色還有一個(gè)錯(cuò)誤陷阱。

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 還可以,但這里我們遇到了一個(gè)問(wèn)題--如果不使用一些奇怪的黑客手段,例如在 true 上進(jìn)行切換,它就無(wú)法完成足夠的工作。

簡(jiǎn)化復(fù)雜性的模式匹配藝術(shù)

模式匹配可以結(jié)束這種復(fù)雜性。想象一個(gè)你有一個(gè) when 子句可以救我們擺脫這種冗長(zhǎng)的迷宮的世界。

簡(jiǎn)單地說(shuō),模式匹配允許我們檢查一個(gè)輸入是否符合一個(gè)模式或一個(gè)特定的類型。

在繼續(xù)之前,需求注意的——現(xiàn)在看的是一個(gè)提議。所以,這可能還不是最終的語(yǔ)法。

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函數(shù)接受輸入,when子句檢查 input 中的角色是否匹配指定的角色 - useradminowner。

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

這會(huì)改變JavaScript的未來(lái)嗎?

我真的相信模式匹配可以極大地改善JavaScript的未來(lái)。通過(guò)直接從Elixir這樣的其他語(yǔ)言中獲取關(guān)鍵的想法,并與JavaScript的強(qiáng)大靈活性結(jié)合,我們肯定可以為“JavaScript之家”增加一個(gè)頂石。

但是,我希望看到我們最喜歡的語(yǔ)言走得更遠(yuǎn),尤其是當(dāng)模式匹配與函數(shù)定義結(jié)合使用時(shí)。這可能會(huì)讓我們走出舒適區(qū),但一旦你開(kāi)始探索它,你就會(huì)意識(shí)到它所擁有的力量和它帶來(lái)的簡(jiǎn)單性。

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`

在這個(gè) Elixir 代碼示例中,我們根據(jù)輸入重新定義了函數(shù)三次。除了它給予的直接清晰性外,解剖這一點(diǎn),我們注意到它做了兩件事——它修剪了句法復(fù)雜性,顯著減少了理解代碼所需的心智負(fù)擔(dān)。

希望有一天JavaScript能夠?qū)崿F(xiàn)這種基于模式的函數(shù)重載,相信這將帶來(lái)一些最好的編程體驗(yàn)。就JavaScript的未來(lái)而言,作者認(rèn)為模式匹配是最令人興奮的前景之一。

以上就是JavaScript模式匹配的詳細(xì)內(nèi)容,更多關(guān)于JavaScript模式匹配的未來(lái)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解如何使用mock.js實(shí)現(xiàn)接口測(cè)試的自動(dòng)化

    詳解如何使用mock.js實(shí)現(xiàn)接口測(cè)試的自動(dòng)化

    這篇文章主要為大家介紹了如何使用mock.js實(shí)現(xiàn)接口測(cè)試的自動(dòng)化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 微信小程序template模板實(shí)例詳解

    微信小程序template模板實(shí)例詳解

    這篇文章主要介紹了微信小程序template模板使用的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這樣的功能,需要的朋友可以參考下
    2017-10-10
  • JavaScript實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    JavaScript實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列

    這篇文章主要介紹了JavaScript如何實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列,在計(jì)算機(jī)里,隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。就跟我們平時(shí)排隊(duì)一樣,先到的排在前面,前面的優(yōu)先處理,下面我們就來(lái)看看在JavaScript里面的優(yōu)先隊(duì)列又當(dāng)如何
    2021-12-12
  • 詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器

    詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器

    這篇文章主要為大家介紹了詳解如何用js實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)版節(jié)拍器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 跨域設(shè)置Cookie失效問(wèn)題解決方案原理分析

    跨域設(shè)置Cookie失效問(wèn)題解決方案原理分析

    這篇文章主要為大家介紹了跨域設(shè)置Cookie失效問(wèn)題解決方案原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 前端的狀態(tài)管理(下)

    前端的狀態(tài)管理(下)

    這篇文章主要介紹了前端的狀態(tài)管理,續(xù)上篇文章內(nèi)容,今天將從 Redux 入手逐漸拓展,需要的小伙伴可以參考一下喲
    2021-10-10
  • 在js中修改html body的樣式

    在js中修改html body的樣式

    這篇文章主要介紹了在js中修改html body的樣式,下面文章圍繞js修改html 和body樣式的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對(duì)大家有所幫助
    2021-11-11
  • JS前端性能優(yōu)化解決內(nèi)存泄漏頁(yè)面崩潰

    JS前端性能優(yōu)化解決內(nèi)存泄漏頁(yè)面崩潰

    這篇文章主要為大家介紹了JS前端性能優(yōu)化解決內(nèi)存泄漏頁(yè)面崩潰示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 8個(gè)工程必備的JavaScript代碼片段

    8個(gè)工程必備的JavaScript代碼片段

    這篇文章小編主要給大家介紹是8個(gè)工程中必須必備的JavaScript代碼片段,需要的小伙伴可以參考下面文章的具體內(nèi)容,對(duì)你有用的話建議收藏哦
    2021-09-09
  • electron渲染進(jìn)程主進(jìn)程相互傳值示例解析

    electron渲染進(jìn)程主進(jìn)程相互傳值示例解析

    這篇文章主要為大家介紹了electron渲染進(jìn)程主進(jìn)程相互傳值示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評(píng)論

东辽县| 阜新市| 咸丰县| 当涂县| 柯坪县| 伊川县| 营山县| 华蓥市| 永定县| 克山县| 洛南县| 土默特左旗| 怀安县| 西乌珠穆沁旗| 虞城县| 如皋市| 梅河口市| 芮城县| 张掖市| 津市市| 广丰县| 广丰县| 凤翔县| 平原县| 措勤县| 涟源市| 油尖旺区| 古田县| 株洲市| 镇康县| 深圳市| 韩城市| 顺平县| 鹤岗市| 南乐县| 尼木县| 霍州市| 桦川县| 陵川县| 柏乡县| 翁牛特旗|