AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁 > 科技  > 軟件

Go 重構(gòu):盡量避免使用 else、break 和 continue

來源: 責(zé)編: 時間:2023-11-01 17:05:27 323觀看
導(dǎo)讀今天,我想談?wù)勏喈?dāng)簡單的事情。我不會發(fā)明什么,但我在生產(chǎn)代碼中經(jīng)常看到這樣的事情,所以我不能回避這個話題。我經(jīng)常要解開多個復(fù)雜的 if else 結(jié)構(gòu)。多余的縮進、過多的邏輯只會加深理解。首先,這篇文章的主要目的是讓

今天,我想談?wù)勏喈?dāng)簡單的事情。我不會發(fā)明什么,但我在生產(chǎn)代碼中經(jīng)常看到這樣的事情,所以我不能回避這個話題。eIZ28資訊網(wǎng)——每日最新資訊28at.com

我經(jīng)常要解開多個復(fù)雜的 if else 結(jié)構(gòu)。多余的縮進、過多的邏輯只會加深理解。首先,這篇文章的主要目的是讓代碼更透明、更易讀。不過,在某些情況下還是必須使用這些操作符。eIZ28資訊網(wǎng)——每日最新資訊28at.com

eIZ28資訊網(wǎng)——每日最新資訊28at.com

else 操作

例如,我們有簡單的用戶處理程序:eIZ28資訊網(wǎng)——每日最新資訊28at.com

func handleRequest(user *User) {    if user != nil {        showUserProfilePage(user)    } else {        showLoginPage()    }}

如果沒有提供用戶,則需要將收到的請求重定向到登錄頁面。If else 似乎是個不錯的決定。但我們的主要任務(wù)是確保業(yè)務(wù)邏輯單元在任何輸入情況下都能正常工作。因此,讓我們使用提前返回來實現(xiàn)這一點。eIZ28資訊網(wǎng)——每日最新資訊28at.com

func handleRequest(user *User) {    if user == nil {        return showLoginPage()    }     showUserProfilePage(user)}

邏輯是一樣的,但是下面的做法可讀性會更強。eIZ28資訊網(wǎng)——每日最新資訊28at.com

break 操作

對我來說,Break 和 Continue 語句總是可以分解的信號。eIZ28資訊網(wǎng)——每日最新資訊28at.com

例如,我們有一個簡單的搜索任務(wù)。找到目標并執(zhí)行一些業(yè)務(wù)邏輯,或者什么都不做。eIZ28資訊網(wǎng)——每日最新資訊28at.com

func processData(data []int, target int) {    for i, value := range data {        if value == target {            performActionForTarget(data[i])            break        }    }}

你應(yīng)該始終記住,使用 break 操作符并不能保證整個數(shù)組都會被處理。這對性能有好處,因為我們丟棄了不必要的迭代,但對代碼支持和可讀性不利。因為我們永遠不知道程序會在列表的開頭還是結(jié)尾停止。eIZ28資訊網(wǎng)——每日最新資訊28at.com

在某些情況下,帶有子任務(wù)的簡單功能可能會破壞這段代碼。eIZ28資訊網(wǎng)——每日最新資訊28at.com

func processData(data []int, target int, subtask int) {    for i, value := range data {        if value == subtask {            performActionForSubTarget(data[i])        }        if value == target {            performActionForTarget(data[i])            break        }    }}

這樣我們實際上可以拆出一個 find 的方法:eIZ28資訊網(wǎng)——每日最新資訊28at.com

func processData(data []int, target int, subTarget int) {    found := findTarget(data, target)    if found > notFound {        performActionForTarget(found)    }    found = findTarget(data, subTarget)    if found > notFound {        performActionForSubTarget(found)    }}const notFound = -1func findTarget(data []int, target int) int {    if len(data) == 0 {        return notFound    }    for _, value := range data {        if value == target {            return value        }    }    return notFound}

同樣的邏輯,但是拆分成更細粒度的方法,也有精確的返回語句,可以很容易地通過測試來實現(xiàn)。eIZ28資訊網(wǎng)——每日最新資訊28at.com

continue 操作

該操作符與 break 類似。為了正確閱讀代碼,您應(yīng)該牢記它對操作順序的具體影響。eIZ28資訊網(wǎng)——每日最新資訊28at.com

func processWords(words []string, substring string) {    for _, word := range words {        if !strings.Contains(word, substring) {            continue        }                // do some buisness logic        performAction(word)    }}

Continue 使得這種簡單的流程變得有點難以理解。eIZ28資訊網(wǎng)——每日最新資訊28at.com

讓我們寫得更簡潔些:eIZ28資訊網(wǎng)——每日最新資訊28at.com

func processWords(words []string, substring string) {    for _, word := range words {        if strings.Contains(word, substring) {            performAction(word)        }    }}

本文鏈接:http://www.tebozhan.com/showinfo-26-16385-0.htmlGo 重構(gòu):盡量避免使用 else、break 和 continue

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python十大常用庫:讓你的Python編程更上一層樓

下一篇: Java循環(huán)的終止方式

標簽:
  • 熱門焦點
Top