2014-02-19 63 views

回答

9

它被稱爲conditional operator。看到documentation

條件運算符(:)返回一個?兩個值取決於布爾表達式的值。以下是條件運算符的語法。

condition ? first_expression : second_expression; 

條件必須計算爲真正。如果條件爲真,first_expression將被計算併成爲結果。如果條件爲false,則second_expression將被計算併成爲結果。只有兩個表達式中的一個被評估。

所以你的情況,例如:

minX = (minX > pt.X) ? pt.X : minX; 
  • minX > pt.X條件
  • pt.Xfirst_expression
  • minXsecond_expression

這意味着如果條件是minX值將等於pt.X,否則它不會改變,因爲第二個表達式是變量本身。

3

?:是if語句的縮寫。
所以這裏:minX =(minX> pt.X)? pt.X:其minX,其minX將被設置爲pt.X如果其minX比pt.X

3

有條件的經營者大,所以不是寫這個:

if (minX > pt.X) 
    minX = pt.X; 
else 
    minX = minX; 

你可以寫這樣的:

minX = (minX > pt.X) ? pt.X : minX; 
4

這等效於:(?)

if (minX > pt.X) 
{ 
    minX = pt.X; 
} 
else 
{ 
    minX = minX; 
} 
3

問號,用冒號(:)一起形成噸沿他三元條件表達式。這是大多數語言支持(我知道C,C++,C#,Java和JavaScript的,紅寶石都這樣做......隨時糾正我關於例外),並具有以下語法:

(condition) ? (code if true) : (code if false) 

它被稱爲ternary,因爲它接受3個參數,如上所示。

因此,爲了使更具體的例子,讓我們用你的foreach循環的第一行展示

minX = (minX > pt.X) ? pt.X : minX; 

這相當於寫

if (minX > pt.X) { 
    minX = pt.X; 
} else { 
    minX = minX; 
} 

正如你可以看到,4號線的代碼可以被簡化爲一行而不會損失清晰度,這是一種非常強大的語言結構。您通常會看到這在遞歸函數中非常重要,例如計算階乘功能:

int factorial(int n) { 
    return (n == 1) ? 1 : factorial(n-1) * n 
} 
相關問題