小酌重構系列 21 避免雙重否定

2021-09-08 18:24:04 字數 1283 閱讀 4576

在自然語言中,雙重否定表示肯定。但是在程式中,雙重否定會降低**的可讀性,使程式不易理解,容易產生錯覺。

人通常是用「正向思維」去理解一件事情的,使用雙重否定的判斷,需要開發者以「逆向思維」的方式去理解它的含義。

另外,在寫程式時,"!"符號很容易被疏忽和遺漏,一不小心則會編寫出錯誤的**,從而產生bug。

所以,在程式中,我們應當盡量避免使用雙重否定。

/// /// 優惠券

///

public class coupon

}

這樣設計會帶來兩個小問題

// 如果優惠券已經被使用了

if (!coupon.isunused)

這段**如果沒有第1行的注釋,是比較難於理解的,也許你是用以下方式理解的。

理解這段**看起來頗為費勁,我們應該換種方式來理解它。

因此,將屬性設計為isused更為合適。

/// /// 優惠券

///

public class coupon

}

編寫的判斷語句,可讀性良好,也易於理解。

// 如果優惠券已經被使用了

if (coupon.isused)

這段**使用!customer.isnotflagged判斷「客戶賬戶被標記」,如果沒有注釋,這個判斷就比較難理解。

public class order

// 正常的訂單處理流程

}}public class customer

public bool isnotflagged}}

程式本意是為了表達乙個肯定的語義——「如果客戶賬戶是被標記的」,既然如此,我們何不直接用肯定的語義來表示它呢?

重構後,**讀起來就更加直觀了,也很容易被理解。

public class order

// 正常的訂單處理流程

}}public class customer

public bool isflagged}}

在設計bool型別的屬性時,不僅要表達清楚它所表示的業務含義,還應當考慮編寫**時的複雜性,盡量避免使用雙重否定。

小酌重構系列目錄彙總

關注keepfool

小酌重構系列 12 去除上帝類

神說 要有光 就有了光。聖經 上帝要是會寫程式,他寫的類一定是 上帝類 程式設計師不是上帝,不要妄想成為上帝,但程式設計師可以寫出 上帝類 上帝是唯一的,上帝的光芒照耀人間,上帝是很愛面子的,他知道程式設計師寫了 上帝類 搶了他的風頭,於是他降下神罰要懲戒程式設計師。既然你寫了 上帝類 那麼就將你流...

小酌重構系列 17 提取工廠類

在程式中建立物件,並設定物件的屬性,是我們長幹的事兒。當建立物件需要大量的重複 時,看起來就不那麼優雅了。從類的職責角度出發,業務類既要實現一定的邏輯,還要負責物件的建立,業務類幹的事兒也忒多了點。物件建立也是 一件事 我們可以將 這件事 從業務 中提取出來,讓專門的類去做 這件事 這個專門的類一般...

小酌重構系列 18 重新命名

是從命名開始的,我們給類 方法 變數和引數命名,我們也給解決方案 工程 目錄命名。在編碼時,除了應該遵守程式語言本身的命名規範外,我們應該提供好的命名。好的命名意味著良好的可讀性,讀你 的人無需太多的注釋,就能通過名稱知道它是什麼,它能做什麼事兒,以及它應該怎麼用。我們命名 命名,不斷地命名。既然有...