一千萬個為什麽

搜索

在條件陳述中檢查“真實性”或“平等性”的實踐 - 它真的有意義嗎?

我記得很多年前,當我在學校時,我的一位計算機科學老師告訴我們,最好檢查條件的“真實性”或“平等性”,而不是“不平等”等負面的東西。

讓我詳細說明 - 如果可以通過檢查表達式是真還是假來編寫條件代碼,我們應該檢查'真實性'。

示例:確定數字是否為奇數 - 可以通過兩種方式完成:

if ( num % 2 != 0 )
{
 //Number is odd
}

要麽

if ( num % 2 == 1 )
{
 //Number is odd
}

(Please refer to the marked answer f要麽 a better example.)

When I was beginning to code, I knew that num % 2 == 0 implies the number is even, so I just put a ! there to check if it is odd. But he was like 'Don't check NOT conditions. Have the practice of checking the 'trueness' 要麽 'equality' of conditions whenever possible.' And he recommended that I use the second piece of code.

I am not f要麽 要麽 against either but I just wanted to know - what difference does it make? Please don't reply 'Technically the output will be the same' - we ALL know that. Is it a general programming practice 要麽 is it his own programming practice that he is preaching to others?

NOTE: I used C#/C++ style syntax f要麽 no reason. My question is equally applicable when using the IsNot, <> operat要麽s in VB etc. So readability of the '!' operat要麽 is just one of the issues. Not THE issue.

最佳答案

當項目的後期添加更多條件時,問題就出現了 - 我正在研究的項目之一隨著時間的推移逐漸收集條件(然後其中一些條件被移入struts標簽,然後一些轉移到JSTL .. 。) - 一個否定不難閱讀,但5+是一場噩夢,特別是當有人決定重組並否定整個事情時。也許在一個新項目上,你會寫:

if (authorityLvl!=Admin){
 doA();
}else{
 doB();
}

在一個月內回來看看,它變成了這樣:

if (!(authorityLvl!=Admin && authorityLvl!=Manager)){
 doB();
}else{
 doA();
}

還是很簡單,但還需要一秒鐘。
現在再給它5到10年腐爛。
(x%2!= 0)肯定不是問題,但也許避免上述情況的最佳方法是教導學生不要使用負面條件作為一般規則,希望他們之前會使用某些判斷他們這樣做 - 因為只是說它可能成為一個維護問題可能不是足夠的動力。

作為附錄,編寫代碼的更好方法是:

userHasAuthority = (authorityLvl==Admin);
if (userHasAuthority){
 doB();
else{
 doA();
}

現在未來的編碼器更有可能只添加“|| authorityLvl == Manager”,userHasAuthority更容易進入一個方法,即使條件被重組,它也只會有一個負數。此外,在應用De Morgan定律時,沒有人會在應用程序中添加安全漏洞。

轉載註明原文: 在條件陳述中檢查“真實性”或“平等性”的實踐 - 它真的有意義嗎?