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

當前位置:首頁 > 科技  > 軟件

Go 重構:盡量避免使用 else、break 和 continue

來源: 責編: 時間:2023-11-01 17:05:27 272觀看
導讀今天,我想談談相當簡單的事情。我不會發明什么,但我在生產代碼中經常看到這樣的事情,所以我不能回避這個話題。我經常要解開多個復雜的 if else 結構。多余的縮進、過多的邏輯只會加深理解。首先,這篇文章的主要目的是讓

今天,我想談談相當簡單的事情。我不會發明什么,但我在生產代碼中經常看到這樣的事情,所以我不能回避這個話題。ac628資訊網——每日最新資訊28at.com

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

ac628資訊網——每日最新資訊28at.com

else 操作

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

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

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

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

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

break 操作

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

例如,我們有一個簡單的搜索任務。找到目標并執行一些業務邏輯,或者什么都不做。ac628資訊網——每日最新資訊28at.com

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

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

在某些情況下,帶有子任務的簡單功能可能會破壞這段代碼。ac628資訊網——每日最新資訊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 的方法:ac628資訊網——每日最新資訊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}

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

continue 操作

該操作符與 break 類似。為了正確閱讀代碼,您應該牢記它對操作順序的具體影響。ac628資訊網——每日最新資訊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 使得這種簡單的流程變得有點難以理解。ac628資訊網——每日最新資訊28at.com

讓我們寫得更簡潔些:ac628資訊網——每日最新資訊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 重構:盡量避免使用 else、break 和 continue

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

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

下一篇: Java循環的終止方式

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 俄羅斯:將審查iPhone等外國公司設備 保數據安全

    iPhone和特斯拉都屬于在各自領域領頭羊的品牌,推出的產品也也都是數一數二的,但對于一些國家而言,它們的產品可靠性和安全性還是在限制范圍內。近日,俄羅斯聯邦通信、信息技術
  • 印度登月最關鍵一步!月船三號今晚進入環月軌道

    8月5日消息,據印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環月軌道。這是該探測器能夠成功的最關鍵步驟之一,如果成功將開始圍
  • 8月總票房已突破10億!《封神》第一:口碑已經成了

    8月5日消息,據燈塔專業版數據,截至8月5日9時35分,8月總票房(含預售)已突破10億。其中,《封神》以大比分的優勢領先。根據官方消息,目前該片總票房已經超過14.
  • 零售大模型“干中學”,攀爬數字化珠峰

    文/侯煜編輯/cc來源/華爾街科技眼對于絕大多數登山愛好者而言,攀爬珠穆朗瑪峰可謂終極目標。攀登珠峰的商業路線有兩條,一是尼泊爾境內的南坡路線,一是中國境內的北坡路線。相
  • ESG的面子與里子

    來源 | 光子星球撰文 | 吳坤諺編輯 | 吳先之三伏大幕拉起,各地高溫預警不絕,但處于厄爾尼諾大“烤”之下的除了眾生,還有各大企業發布的ESG報告。ESG是“環境保
  • 網紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業評論6月26日高調宣布入市,網絡名嘴大v胡錫進居然進軍了股市。在一次財經媒體峰會上,幾個財經圈媒體大佬就“胡錫進炒股是否知道認真報道”展開討論。有
  • iQOO 11S評測:行業唯一的200W標準版旗艦

    【Techweb評測】去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,該機不僅全球首發2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競
  • 聯想的ThinkBook Plus下一版曝光,鍵盤旁邊塞個平板

    ThinkBook Plus 是聯想的一個特殊筆記本類別,它在封面放入了一塊墨水屏,也給人留下了較為深刻的印象。據有人爆料,聯想的下一款 ThinkBook Plus 可能更特殊,它
Top