別再用Else語句寫代碼了!

2020-12-15 騰訊網

作者丨Joey Colon

譯者丨核子可樂

策劃丨小智

if…else 語句是許多程式設計師在寫代碼時最常用的方式之一。你甚至可以看到許多程式設計師的代碼中嵌套著無數 else 語句。可這樣,真的好嗎?

一篇關於衛語句的實用介紹。

在剛開始接觸編程時,我多希望能有人在我摸索著開發第一個網站的過程中,給我分享一點中肯的人生經驗……

那會兒我犯下的第一個大錯誤,就是在編寫條件時過度使用 else 關鍵字。不只是我,後來我發現很多開發者朋友都有這個問題,所以我打算在今天的文章裡好好聊聊這件事。

免責聲明:本文純粹是我自己的主觀感受。

在某些情況下,我們可能沒辦法在代碼裡使用這類方法。有時候,使用 else 關鍵字確實是最好的解決方案。這些我都承認,本文只是想給大家提供一點關於構建邏輯的新思路。

縮進波動拳!

衛語句

根據維基百科的介紹,衛語句是對完整性前提條件檢查。用於避免在執行期間發生錯誤。

望之不似人言,下面我就用普通話翻譯翻譯。我們首先得先對前提條件(在代碼開頭)進行完整性檢查,這樣才能避免主邏輯流程當中出現錯誤。

在理想的流程中(當驗證正確時),我們希望程序的主邏輯在驗證之後才開始運行。

現在讓我們假設自己在運營一個網站,其中包含一個高級購買區域,僅限付費客戶在每天夜裡 12 點之後訪問。

在實際應用中,我們可能會返回某種形式的異常。

雖然這是一種條件流方案,但即使其中只包含少量 else 關鍵字,我們也很難跟上這樣的條件思路。

這還只是條件邏輯的一個簡單示例。在實際場景當中,大家肯定遇到過對邏輯極為複雜的類進行導航的狀況。在我看來,這樣的編碼方式缺乏可持續性,我們應該採取更好的辦法。

使用衛語句,我們可以遵循以下框架:

利用這套框架,我們可以重構以前的代碼,具體如下所示:

在衛語句中,我們通常將布爾表達式反轉為我們想要 assert 的內容。如果我們希望用戶在登錄之後才能查看此頁面,那麼首先就得檢查他們是否已經登錄。

這種方法實現了相同的精確邏輯流程,但在我看來,這體現出了更為清晰的條件邏輯處理方法。

總結

在編程時,我們應該始終牢記這樣一個問題:「這些代碼能夠穩定執行至少 6 個月嗎?」

就當下來講,這些代碼也許能夠很好地解決問題。但是未來呢?在編寫代碼時不考慮後續需求,顯然是種愚蠢的行為。

考慮到這一點,我果斷放棄了那些已經修復過無數次的代碼,從零開始編寫功能。是的,這樣才能徹底解決掉技術債務。

適當運用衛語句,大家將能夠為自己乃至團隊的開發成果奠定堅實的基礎,從而在未來需要時隨時滿足種種新增需求。

https://medium.com/better-programming/why-you-need-to-stop-using-else-statements-5b1fd09dea9e

美團外賣日單量超過 3000W,擁有近百萬騎手數量,是全球最大的即時配送網絡。與大多數網際網路企業線上業務為主的模式不同,配送系統需要在現實世界中的真實環境和真實場景中「運行」,最大的挑戰是需要對騎手所在的環境和場景做到實時感知、準確理解和最優決策,這也是近幾年行業經常說的「數位化」和「智能化」技術。

點個在看少個 bug

相關焦點

  • 只會用if,else寫代碼?該換一種簡單高效的方式了!
    在寫代碼的過程中,用得最多的語句大概就是if,else了,這個語句堪稱萬能語句,能滿足絕大多數需求。但是如果太多的if,else嵌套,你還會去選擇使用它嗎?本文推薦一種可以代替if,else語句的寫法-衛語句,讓你的代碼運行更高效別再用if,else寫代碼了!高效語句你值得擁有!
  • 求求你們了,別再寫滿屏的 if/ else 了
    為什麼我們寫的代碼都是 if-else?程式設計師想必都經歷過這樣的場景:剛開始自己寫的代碼很簡潔,邏輯清晰,函數精簡,沒有一個 if-else,可隨著代碼邏輯不斷完善和業務的瞬息萬變:比如需要對入參進行類型和值進行判斷;這裡要判斷下對象是否為 null;不同類型執行不同的流程。
  • switch和if else語句到底用誰
    大家都知道在Java中一共有兩種選擇語句分別是switch與if語句,但究竟什麼時候用?用哪一種好呢?這一直是大家心中的一個小疑慮。現在簡單的回顧switch與if語句的基本構造,再深入了解它們的使用區別。
  • 求求你們了,別再寫滿屏的 if/ else 了!
    程式設計師想必都經歷過這樣的場景:剛開始自己寫的代碼很簡潔,邏輯清晰,函數精簡,沒有一個 if-else,可隨著代碼邏輯不斷完善和業務的瞬息萬變:比如需要對入參進行類型和值進行判斷;這裡要判斷下對象是否為 null;不同類型執行不同的流程。
  • 魅力python——if-elif-else語句
    百分制我們可以自己用if—else語句寫一個小程序,輸入一個分數,顯示成績所屬等級。if-else語句可以看出,每次if只判斷一個條件是否符合,不符合就扔給else,再繼續判斷if。但是這樣寫下來是不是很麻煩了?是不是思路也不是那麼清晰了呢?縮進越來越多,越來越難看,容易出錯。我們試一試用if-elif-else再寫一個小程序實現同樣的功能。#!/usr/bin/python#!
  • 【Java】面試官靈魂拷問:if語句執行完else語句真的不會再執行嗎?
    ,這不,一名讀者面試時,被面試官問到了一個直擊靈魂的問題:if 語句執行完else語句真的不會再執行嗎?問題分析最近一名讀者留言說,自己出去面試被面試官的一道奇葩問題問倒了,這個問題就是:if語句執行完else語句真的不會再執行嗎?這名讀者確實不知道該如何回答這個問題。回去後,自己查閱了很多資料也沒弄明白這個問題!想必很多讀者朋友遇到這種奇葩面試題時,多多少少都會覺得鬧心吧!不過,鬧心歸鬧心,問題還是要解決的。今天,我們就一起來剖析下這個奇葩的面試題。
  • C語言if else語句
    如果語句塊中只有一個語句,也可以省略{ },例如:if(age>=18) printf("恭喜,你已經成年,可以使用該軟體!\n");else printf("抱歉,你還未成年,不宜使用該軟體!\n");由於if else 語句可以根據不同的情況執行不同的代碼,所以也叫分支結構或選擇結構,上面的代碼中,就有兩個分支。
  • VBA中的If-Then-Else語句
    第一節 If...Then...Else語句大家好,我們再次理解If...Then...Else語句在代碼中的作用,這個語句在VBA代碼中隨處可見,對於VBA而言,條件判斷應用的非常靈活,或者可以說是EXCEL函數的終結者,當你利用VBA上手後,不用再去應用EXCEL函數去解決問題了。
  • 3.2 if else語句
    例如:2、if(表達式){語句1} else{ 語句2}。例如:12if(x>y)printf("%d",x);else printf("%d",y);大家注意到沒有,上面的語句沒有用{花括號}括起來,只有一個語句還沒問題,但如果有多個語句,就很容易出錯。
  • 為什麼 if-else 不是好代碼
    其實這是個再正常不過的coding習慣,當我們代碼量小的時候用來做條件判斷是再簡單不過的了。但對於優秀程式設計師來說,這並不是好代碼,為啥?拋開劑量談毒性都是耍流氓在使用條件判斷語句的地方,如果代碼量小,需要判斷的場景少的話,那麼沒有比 if-else 更合適的語句,比如下面這樣if(object.getIndex() > 0) {    //do something} else {    //do other things}
  • 條件測試語句(2)——if、else搭配使用
    其實我們完全可以再設置一個條件語句,當我們檢查到輸入不是C或者F時,我們就輸出一個提示錯誤的符號就可以了:多加一個條件語句在上一講的內容中,我們對if條件語句做了一些基本的介紹。我們經常需要在條件測試通過的時候執行一個操作,並在沒有通過時執行另外一個操作:在這種情況下,我們就可以使用python提供的if-else語句。if—else語句塊類似於簡單的if語句,但是其中的else語句讓我們能夠指定條件未通過時要執行的操作。
  • Python學習筆記:條件語句if、elif與else
    if語句中包含三種條件判斷句式,即if、elif和else。其中,if與elif部分都包含判斷條件,當判斷條件都不成立時,程序才能執行else部分的代碼。if語句最基礎的形式是if-else,其基本語法格式如下。if-else語句常用的參數及說明如表 1所示。
  • [Python基礎教程] 第3章 - if/else 判斷語句
    02if/else 判斷語句有時候,我們希望在執行某些代碼前可以先進行一些邏輯判斷。當滿足某些情況的時候,執行一段代碼;反之,執行另一段代碼。這時就需要用到 if/else 判斷語句。科目評級規則如下:85到100分:優70到84分:良60到69分:及格0到59分:不及格剛剛我們用了 9 行代碼完成這個操作。不過,我們可以將其簡化為 4 行,而且不超綱,用的都是目前講過的知識點。
  • 《第4章 Python 流程控制語語句》4.2.2 if……else語句!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》4.2.2 if...else語句!(2)if....else...形式語句格式示例:if 要判斷的條件:滿足條件時執行的語句else:不滿足條件時執行的語句注意:else必須配合if使用,而其 else 後不跟條件,else總與離它最近的if進行匹配。if和else語句以及各自的縮進部分是一個完整的代碼塊。
  • 在 js 開發中,如何減少 if else 語句的使用
    在 js 開發中,如何減少 if else 語句的使用代碼中嵌套的 if/else 結構往往導致代碼不美觀,也不易於理解。
  • C++教程:C++中的If Else語句
    C++中的If Else語句。使用條件語句,我們可以根據條件執行代碼的某些部分。特別是在這篇文章中,我們舉了一些if else條件的例子。使用if語句可以根據給定條件的true或false來控制程序是否進入代碼段。還可以使用if語句根據用戶輸入採取行動,例如根據用戶輸入,我們可以檢查兩個數字,哪個大,哪個小,我們將在我們的文章中看到這個例子。
  • [GO語言基礎] 五.順序控制語句和條件控制語句(if、else、switch)
    這篇文章將詳細講解順序控制語句和條件控制語句。這系列文章入門部分將參考「尚矽谷」韓順平老師的視頻和書籍《GO高級編程》,詳見參考文獻,並結合作者多年的編程經驗進行學習和豐富,且看且珍惜!後續會結合網絡安全進行GO語言實戰深入,加油~這些年我學過各種程式語言,從最早的C語言到C++,再到C#、PHP、JAVA,再到IOS開發、Python,到最新的GO語言,學得是真的雜。
  • 無需If-Else語句,狀態模式即可編寫乾淨可維護的代碼
    字,預計學習時長5分鐘圖源:unsplashIf-Else語句我們再熟悉不過了用狀態對象來代替If-Else吧。應用狀態模式,你只需使用專用狀態對象而無需使用If-Else語句來更改對象行為。像下面這樣的代碼時代已經一去不復返了:觸發PTSD警告你肯定曾經寫過更複雜的分支
  • 【每天一學】JavaScript if...else語句
    在寫一個程序,可能有一種情況,當你需要採用一個路徑出給定兩個路徑。
  • Python if else條件語句詳解
    前面我們看到的代碼都是順序執行的,也就是先執行第1條語句,然後是第2條、第3條……一直到最後一條語句,這稱為順序結構。