2013-02-11 49 views
0

|| ||的意義是什麼? 2 像或兩個函數之間的調用

之間的函數調用

{ 
//some code 
return Find(n.left,req)||Find(n.right,req); 
} 

http://www.careercup.com/question?id=7560692可以有一個人幫助我理解。提前謝謝了。

+1

這是不是一個真正的關於*算法*的問題 - 這是一個關於語言的*運算符*的問題,你還沒說是什麼語言。找出你感興趣的語言,然後查看相關語言規範中的含義。 (這幾乎肯定是條件OR運算符,但你應該自己查找它。) – 2013-02-11 08:02:25

+0

謝謝,請考慮我不是專家,而是新程序員 – 2013-02-11 08:17:33

回答

0

在Java(和C和C#)||意味着「懶惰或」。單筆畫|也意味着「或」,但操作略有不同。

要計算|| b,計算機會計算a的真值(true或false),如果a爲真,則返回真值而不會計算b,因此單詞「lazy」。只有a是假的,它是否會檢查b是否爲真(如果a或b爲真)。

要計算A | B,計算機工作了a和b,然後再「ORS」的答案值在一起。

「lazy or」||效率更高,因爲它有時根本不需要計算b。你可能想要使用| b的唯一原因是,如果b實際上是一個函數(方法)調用,並且由於該方法的某些副作用,您希望確保它只執行一次。我個人認爲這種糟糕的編程技術,並且在很少的情況下,我希望b總是被明確地計算出來,我明確地這樣做,然後使用懶惰或者。

例如考慮的函數或方法foo(),它返回一個布爾值。取而代之的

布爾X = A | FOO(東西);

我會寫

boolean c = foo(something); boolean x = a || c;

它明確調用foo()一次,所以你知道發生了什麼。

更好的編程實踐,恕我直言。確實,最好的做法是完全消除foo()中的副作用,但有時很難做到這一點。

如果您使用懶惰或||想想你評估它的順序。如果a很容易計算並且通常是真的,那麼|| b將比b || a更有效,因爲大多數時候只需簡單計算就可以了。相反,如果b通常是錯誤的並且很難計算,那麼b || a不會比| b更有效。如果a或b中的一個是常量而另一個是方法調用,則應該將常量作爲第一項|| foo()而不是foo()|| a,因爲方法調用總是比使用簡單的局部變量。

希望這會有所幫助。

彼得·韋伯

1

這意味着,它返回真,如果這兩個功能中的一個爲真(或兩者)。

依賴於編程語言,方法調用查找(n.left,REQ) - >如果這是真的 - 返回true。如果它是假的,它調用Find(n.right,req)並返回它的布爾值。

+0

感謝Wasafa1和M.M – 2013-02-11 08:18:06

0

它表示邏輯中的OR運算符。

如果至少有一個Find(...返回true,當前函數的結果將是true

0
return Find(n.left,req)||Find(n.right,req); 

表示執先找到{查找(n.left,REQ)}並返回true,如果它返回true或

執行所發現的第二返回true值,如果它返回true,否則爲false。

相關問題