2013-09-23 92 views
0

我有一個關於else條件的衝突。我可以用兩種方式編寫程序。其他語句的用法

  1. 方法1

    $msg = ''; 
    if(cond) 
    { 
        $msg = 'success'; 
    } 
    else 
    { 
        $msg = 'error'; 
    } 
    
  2. 方法2

    $msg = 'error'; 
    if(cond) 
    { 
        $msg = 'success'; 
    } 
    

能否請你告訴我哪一種方法更好,怎麼樣?由於

+1

'$ msg =(cond)? '成功':'錯誤';'? – Nobody

+0

第二個比較好,當然。線條少,行爲相同,不會產生影響。 – DontVoteMeDown

+5

在這種情況下,它看起來沒有什麼區別,但作爲一個經驗法則,我喜歡將變量設置爲「更安全」或更可能的條件,所以如果它變成一長串檢查並且我錯過了某些東西,或意外發生的事情,它至少有一個默認值。 – Mike

回答

3

在這兩者之間,我會選擇第一個。

$msg = ''; 
if(cond) { 
    $msg = 'success'; 
} else { 
    $msg = 'error'; 
} 

這是可讀的,並清楚地表達了它試圖做的事情。 如果條件成立,則消息將是success。如果不是,則消息將是error

但是對於上面的一些非常簡單的東西,我會使用三元語句代替。這是非常有用的,可以減少代碼,但可能會使您的代碼在某些情況下無法讀取:

$msg = (cond) ? "success" : "error"; 

很酷,對不對?在這裏閱讀更多關於ternary operators

+0

只要條件不過分複雜,我會說三元運算符更具可讀性,並具有使所有情況下變量初始化都很容易的優點。 – Nobody

+1

這很主觀,但我同意第一個更好。如果程序塊變長,那麼不熟悉代碼的人可能會「忘記」$ msg'具有「默認」初始化。 – jedwards

+0

@Nobody:我同意。使用三元運算符聽起來像* this *中的最佳解決方案。 –

1

我想說第二個更好,因爲它是少線,它有一個默認行爲。無論如何,即使您在路上添加其他檢查,您也知道$ msg將包含某些內容。不過,我想使用三元運算在這種情況下:

$msg = (cond) ? 'success' : 'error';

1

代碼的可讀性問題,所以我會用三元運算符當它真正簡化了的樣子。 考慮這一點,

function foo($stuff) { 

    $var = null; 

    if ($stuff === true) { 
    $var = true; 
    } else { 
    $var = false; 
    } 

    return $var !== null ? true : false; 
} 

因爲在這種情況下,return $var !== null ? true : false很短,它可以被視爲「容易閱讀和理解」。

考慮這一點,

function foo($stuff) { 

    $var = null; 

    if ($stuff === true) { 
    $var = true; 
    } else { 
    $var = false; 
    } 

    if ($var !== null) { 
    return true; 
    } else { 
    return false; 
    } 
} 

同樣的事,但一點點長

結論

  • 如果條件並不長,它的好堅持與三元運營商(由於可讀性)。但是,如果它不是,那麼你最好用if/else

堅持你也應該把這個事情「辦法」,而不是「法」,因爲一個方法是一個類中的一個函數。