簡體   English   中英

如果代碼重復或條件重復

[英]if with duplicated code or if with duplicated conditions

在接下來的代碼示例中,您認為更好的是什么,還是可以想到另一種以更優雅的方式進行編碼的方法?

if中的條件重復(兩次檢查'b')

if(a || b) {
  doAB();
}
if(b) {
  doB();
}

重復的代碼(兩次執行doAB()):

if(a) {
  doAB();
}
if(b) {
  doAB();
  doB();
}

或混合...

if(a || b) {
  doAB();
  if(b) {
    doB();
  }
}

編輯:

一位同事提議:

int mask = a?1:b?2:0;
switch(mask) {
  case 2:
    doB();
  case 1:
    doAB();
}

我猜第一個最好,因為第二個很可能是不正確的。 我會使用您認為簡單且不易出錯的表格。

第二個例子最應該是

if (a) {
  doAB();
} else if (b) {
  doAB();
  doB();
}

如果是a,則不能為b,反之亦然

在這種情況下,您不需要兩個條件。 它應該是一個==!b

// a || b is always true
doAB();
if(b) {
  doB();
}

完全不同的觀點:避免使用if / else東西。

在OO語言中,可以使用多態代替if / else。 而不是要求某種狀態; 然后調用特定方法; 您只需在某個對象上調用方法; 對象的類型將確保該方法執行正確的操作。

換句話說:在某個時候,您決定必須實例化哪個具體類; 以后,您不必擔心。

要知道,Smalltalk語言甚至沒有如果 (如關鍵字/語言構建INT)。

當然,您不應該進去,而要用另一個替換。 相反,您可以退后一步,弄清楚是否以及如何重新解決問題。 利用多態性。

您可以在此處觀看一段非常不錯的視頻 ,以了解實際情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM