2010-07-31 37 views
3

以下哪些2個例子中的一個將執行更好:嵌套相對於複合條件

實施例1:

if($condition_1) 
{ 
if($condition_2) 
{ 
    // do something 
} 
} 

實施例2:

if($condition_1 and $condition_2) 
{ 
// do something 
} 

回答

6

如果有差異,可以忽略不計。您不必擔心第二個評估兩個條件,因爲short-circuit evaluation

IMO第二種形式使代碼更具可讀性。我討厭看到100萬縮進。

+4

在什麼情況下第二個例子只評估$ condition_1,但例1評估兩者? – 2010-07-31 15:02:40

+0

@Cags LOL。我想我腦中有一個短路。 – NullUserException 2010-07-31 15:06:03

+0

他們發生了,該死的短路。 :) – 2010-07-31 15:24:13

6

這是過早微嚴重情況下優化。即使存在差異,不存在不存在的問題 - 這不是一個問題,哪個問題表現更好,哪個問題更具可讀性。這將取決於具體情況。但是,從背景分離的角度來看,我認爲第二種選擇是可取的:「if」陳述暗示「其他」,即使它不存在,兩個「if」誤導讀者。

2

如果根本不存在差異,則可以忽略不計。我看到簡潔有以後的方法。

1

我發現下面here

邏輯表達式的計算是隻要結果被稱爲停止。

所以,如果你寫cond1 and cond2,它會停止,如果cond1計算爲false。所以速度甚至沒有差別。

2

嵌套控制結構將有更多Cyclomatic Complexity。比較嵌套if塊構建

Lines of Code (LOC):         6 
    Cyclomatic Complexity/Lines of Code:   0.40 
Comment Lines of Code (CLOC):       1 
Non-Comment Lines of Code (NCLOC):     5 

與複合如果塊結構

Lines of Code (LOC):         9 
    Cyclomatic Complexity/Lines of Code:   0.25 
Comment Lines of Code (CLOC):       1 
Non-Comment Lines of Code (NCLOC):     8 

注意,數你如何佈局的代碼變化。在一行上寫嵌套結構會將CC增加到0.67。一般來說,你想避免嵌套控制流太深,因爲它會變得更難以維護。

因此,如果它不利於可讀性,請使用組合比較。

編輯:萬一你想知道爲什麼它是九條六交通線:因爲我加入<?php和空行來我用於分析

0

的文件如果它只是一個街區,去與後來的選項因爲它需要更少的縮進,縮短並且可以說可讀性更高。

但是,請注意,從那時起,您將使用第一個變體,因爲您將添加else s。這些都是不相同的:

if ($condition_1) { 
    if ($condition_2) { 
     // do something 
    } 
    else { 
     //do something else 
    } 
} 

if ($condition_1) { 
    if ($condition_2) { 
     // do something 
    } 
} 
else { 
    //do something else 
}