2009-04-15 140 views
2

在代碼審查,我發現我們的C#代碼中的許多地方,看起來像這樣:布爾類型

if(IsValid()) { 
    return true; 
} 
else { 
    return false; 
} 

,甚至是「更好」:

return (IsValid()? true : false); 

我一直想知道爲什麼不只是寫代碼像這樣:

return IsValid(); 

這是我寫這段代碼的方式。我並不質疑開發人員的技能,但也許試圖研究開發人員的靈魂。爲什麼開發人員會喜歡更復雜的代碼,而不是更簡單直觀?或者,原因可能是布爾型難以接受爲一流公民?

+0

提醒我有條件的語句,如:如果MyBoolean = True然後... – rvarcher 2009-04-15 17:26:00

+0

返回IsValid()?真:是真的?真:是真的?真:是真的?真假; – Juliet 2009-04-15 17:26:48

回答

6

是的,你應該照你說的去做。這些人正在做這些過於冗長的事情,因爲他們最初是以這種方式學習的,可能是在CS 101中,他們從來沒有想過要走出的空間,他們知道的作用是看看是否有更好,更簡單的方法。

這確實與他們的能力有關。優秀的程序員需要更體貼一點,而且更少隱藏。請參閱https://stackoverflow.com/questions/423823#424005,https://stackoverflow.com/questions/423823#423915

15

我認爲return IsValid();是完全有效和可讀的代碼。

順便說一句,我肯定會打人誰寫(IsValid() ? true : false)在臉上。這是不必要的複雜。

PS。這是svn blame的設計目的。

+0

借調。我在代碼中看到很多第一個例子,並沒有得到它。 – Dana 2009-04-15 15:55:36

1

我也只是說「return IsValid();」我認爲你這樣做是100%正確的

1

return IsValid();是要走的路。更少的代碼,更簡潔 - 選擇冠軍

2

前兩個例子的原因是完全人:

  • 無知
  • 缺乏與人的代碼智力參與
  • 代碼被重構,但只有中途

沒有理由不(我知道這是一個雙重否定)去return IsValid();

3

如果你心不在焉,很容易從這個重構的一些代碼:

private bool ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(someCondition && unpredictableThing == 5) 
     return true; 
    else 
    { 
     // log something 
     return false; 
    } 
} 

要這樣:

private void IsValid() { return (someCondition && unpredictableThing == 5); } 

/* ... */ 

private void ConsiderTheOstrich() 
{ 
    /* do ostrich things */ 

    if(IsValid()) 
     return true; 
    else 
     return false; // ostrichlogger logs it for us now 
} 

沒有注意到爲了簡潔額外的機會。

1

我甚至有時會看到一些這方面的遺留代碼的我維護:

bool retValue; 
if (IsValid()) 
{ 
    retValue = true; 
} 
else 
{ 
    retValue = false; 
} 

return retValue; 

用字符支付一些程序員?

0

是的,當然return IsValid();將是最理想的,如果你有唯一的代碼是如上。

我想你會發揮什麼,但你的功能還在做什麼?其餘的代碼可能會讓開發人員更加關注IsValid()的if語句。畢竟,如果它只是返回IsValid(),那麼爲什麼調用代碼不是直接檢查IsValid(),而是使用這個包裝器方法。

2

當您是第一種情況時更容易調試。當您逐步查看源代碼時,無需打開immediate window或運行IsValid();以查看返回值,可以更容易地找出返回值的含義。

對於第一和第二種情況下,開發人員可能不知道她/他可以簡單地做

回報的IsValid();

最後,由於公司政策,開發人員可能被迫使用第一種或第二種語法。

0

分心

我知道這是發生在我的代碼之前,我可以跟蹤回來時,我被中斷或不重視而編碼到(我只責怪SO!)

無知

不知道更好的方法來做到這一點。我們理所當然地認爲所有程序員都是邏輯思考的,但事實並非如此。有些程序員是對他們之前所看到的模式純粹去:

If (integerA == integerB) { //do special stuff } 

//Given integer equality; boolean equality ought to look the same... 
If (isValid() == true) { //do special stuff } 

動量

那怎麼有人一直做到了,所以這就是他們繼續這樣做。