2013-02-19 66 views
-1

許多人在腳本語言中使用下面的符號,但我不太明白它是如何工作的。||和&&返回值符號的工作?

~$ false || echo "aa" 
aa 
~$ true || echo "aa" 
~$ true && echo "aa" 
aa 
~$ false && echo "aa" 
~$ 

雙方首先執行,然後評估其返回值?

什麼是更直接的方式來寫這些?

||XOR

+0

''||只是'或',具有短路的功能 – Volatility 2013-02-19 10:05:14

+1

[短路評價](http://en.wikipedia.org/wiki/Short- circuit_evaluation) – raina77ow 2013-02-19 10:05:48

+2

「||」不是「異或」,而是「或」。不像'OR','XOR'不能被短路。 – Bruno 2013-02-19 10:08:38

回答

1

使用&&||來控制評估是 編程中非常基本的東西。正如許多人已經回答的那樣,他們正在使用「短路評估」。
在某些語言中,它們與andor相同,但不是全部。在例如 他們做的紅寶石不是的意思完全一樣(據我所知)。

什麼會是一個更直接的方式來寫這些?

可以說,使用&&||代替if ... else是懶惰 編程,但有些人會說,使用&&||結構 最直接的。

如果你將有一個替代(或的一種方式更好地理解這種):

expr && echo "aa" 

# is the same as 

if expr; then 
    echo "aa" 
fi 

expr || echo "aa" 

# is the same as 

if ! expr; then 
    echo "aa" 
fi 

expr && echo "yes" || echo "no" 

# is the same as 

if expr; then 
    echo "yes" 
else 
    echo "no" 
fi 

,當然是一個組合

if this && that; then 
    echo "yes" 
else 
    echo "no" 
fi 

「短路評估」是一個非常重要的規則,並且在某些 情況下,代碼取決於此。
在這個例子中(從VIM,但它同樣在許多語言)會有一個異常,如果它不工作:

if exists("variable") && variable == 3 ... 

如果雙方決定着結果之前評估會有一個 如果未定義variable,則爲例外。

已經有一些糟糕的設計語言,例如, &&是 評估結果給出之前,他們沒有那麼好玩的使用。

所以:

if you like it; then 
    use it && be happy 
else 
    use it || be happy 
fi 
1

這被稱爲Short Circuit Evaluation

||是一個OR(不是XOR)。

使用腳本(與源代碼一樣),僅在必要時評估右側。

||如果LHS評估爲假或0,則評估RHS。僅當LHS評估爲真時,RHS才進行評估。

這是因爲true ||任何事情總是如此,所以沒有必要評估RHS。而虛假& &任何事情總是假的。

參見Benefits of using short-circuit evaluation

1

||&&在你列出的所有語言懶惰。

它的工作方式是從左到右評估表達式。在||的情況下,整個表達式的值是不是「false-y」的第一個參數的值(或者如果所有參數都是false-y,則爲最後一個參數)將是表達式的值。

+0

除了在Python中'||'是'或','&&'是'和' – Volatility 2013-02-19 10:08:54

+0

@Volatility是的,當然。 – tom 2013-02-19 10:09:41

1

我覺得這很簡單。

每次首先評估左側,如果需要評估右側。

在第一種情況下,LHS爲false,因此表達式的結果取決於RHS,因爲它是OR操作。因此評估/執行右側。

在第二種情況下,LHS是true,並且OR操作的結果將是true不管什麼是有在RHS,所以RHS不會求/執行。

AND操作發生同樣的事情。只有在LHS爲true的情況下,才需要評估RHS。