2016-10-13 713 views
2

有時我喜歡用早期返回語句來防止嵌套if語句,我發現它使得代碼更少可讀。if-else或early return

我想知道是否有任何客觀或壓倒性的普遍共識作爲兩種下列哪種模式是更好的做法?我不認爲這是一個主觀問題,因爲我真正要問的是有一個近乎客觀的偏好。

void func() { 
    if (a) { 
     do b 
    }  
    else { 
     do c 
    } 
} 

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 
+0

我一直是return語句,如果可能的話,應僅限於在因爲它更容易閱讀和理解函數的末尾所使用的假設下流量。其他人可能會不同意這一點,但這就是爲什麼我會選擇第一個片段。 – b85411

+0

我覺得它非常類似於這個http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement – hakim

回答

1

第一個比較好。簡而言之,它有助於另一位開發人員理解c編譯,因爲條件是錯誤的。它還可以防止其他人對您的代碼進行破壞性更改。這就是說,它們都是正確的,並會都工作得很好

1

我會選擇第一個版本。實際上,我在幾年前就這方面給了一個冗長的解釋。

這兩個例子,就像你現在寫的那樣,在功能上是相同的。如果a條件爲真,則第一個if條件中的邏輯將執行,並且該函數將返回。但是,必須在第二個方案中仔細一看:

void func() { 
    if (a) { 
     do b 
     return; 
    } 

    do c 
} 

眼下,應第一if火,函數將返回,否則c將執行。但是,考慮到程序員因爲某種原因決定重構該方法的某個點。如果他要取出return聲明,那麼c的邏輯將執行,如果a爲真。這可能看起來很牽強,但它可能比你想象的更容易發生。另一方面,如果使用完整的if-else,那麼即使是if條件的重構也不會導致同時對邏輯進行c評估。