日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

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

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

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

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

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

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

else 操作

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

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

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

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

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

break 操作

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

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

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

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

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

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

continue 操作

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

讓我們寫得更簡潔些:IrP28資訊網——每日最新資訊28at.com

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

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

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

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

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

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • 石頭智能洗地機A10 Plus體驗:雙向自清潔治好了我的懶癌

    一、前言和介紹專為家庭請假懶人而生的石頭科技在近日又帶來了自己的全新旗艦新品,石頭智能洗地機A10 Plus。從這個產品名上就不難看出,這次石頭推出的并不是常見的掃地機器
  • 線程通訊的三種方法!通俗易懂

    線程通信是指多個線程之間通過某種機制進行協調和交互,例如,線程等待和通知機制就是線程通訊的主要手段之一。 在 Java 中,線程等待和通知的實現手段有以下幾種方式:Object 類下
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業務來說可快速實現自動化的上手工作。Selenium IDEKat
  • 如何使用JavaScript創建一只圖像放大鏡?

    譯者 | 布加迪審校 | 重樓如果您曾經瀏覽過購物網站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區域,以便瀏覽。結合這個小小的重要功能可以大大改善您網站的用戶體驗
  • 只需五步,使用start.spring.io快速入門Spring編程

    步驟1打開https://start.spring.io/,按照屏幕截圖中的內容創建項目,添加 Spring Web 依賴項,并單擊“生成”按鈕下載 .zip 文件,為下一步做準備。請在進入步驟2之前進行解壓。圖
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的“頭騰
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    ©自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的“新電商三兄弟”成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
Top 主站蜘蛛池模板: 南岸区| 旺苍县| 杂多县| 宣恩县| 赣州市| 金湖县| 东丰县| 上虞市| 安西县| 兴义市| 舟山市| 元朗区| 西林县| 巢湖市| 弥渡县| 东明县| 班戈县| 福清市| 大悟县| 沙田区| 漯河市| 玉门市| 黄龙县| 通州市| 日照市| 沙田区| 宜兰市| 北票市| 龙江县| 马尔康县| 东辽县| 平凉市| 南投县| 梁河县| 岱山县| 镇沅| 紫金县| 象山县| 开远市| 德化县| 堆龙德庆县|