2012-06-20 96 views
1

我發現了一種在搜索網站源代碼時以另一種方式編寫if語句的方法(我認爲)。編寫if語句的新方法

相反的:

if(a)b; 

或:

a?b:''; 

我讀:

!a||b; 

是第三條道路一樣的前兩個?如果是的話,爲什麼我們會用第三種方式?

回答

4

第三種方法與前面的方法相同。使用它的一個參數是保存字節。反對使用它的強烈爭論是可讀性。您最好在編寫代碼時着重於可讀性,並使用最小化程序(如Google Closure Compiler)來保存字節。

它可以是更短:

a && b; 
/* !a||b means: 
(not a) OR b 
    which is equivalent to 
a AND b 
    which turns out to be 
a && b 
*/ 
+3

'(不是假的)或假的'相當於'假'和'假'?真? ) – raina77ow

+2

你的DeMorgans生鏽了,先生。 – jbabey

+0

a && b不等於!a || b邏輯上。然而,如果a是真的,那麼&& b只評估b。 – geekchic

4

歡迎的short-circuit evaluation概念。這是邏輯運算符衆所周知的屬性,用於不同的語言。大多數情況下,這將用作適當的if或任何其他流控制語句中的子表達式,或者表達足夠短的條件,以便以這種方式保持可讀性,或者通過自動轉換來保存字節。

甚至有關於那些問題的標籤:

1

有時可以評估布爾表達式的結果而無需評估所有子表達式。如果我們有A||B,並且A爲真,則無需評估B,因爲結果無論如何都是正確的。這種行爲稱爲「快捷布爾評估」,在大多數編程語言中都是事實標準。它允許編寫諸如if (i < A.length && A[i] == ...)之類的表達式,而不評估A[i]操作數,如果i值不正確,可能導致異常。

在這種特殊情況下,!a||bif(a)b是一樣的,但是這種代碼的可讀性和可維護性是一個問題。