2013-11-24 141 views
0

我看到了這個在互聯網上,我想不到這是什麼:這個變量是什麼意思?

他們創建了布爾命名障礙,並將其設置爲false。

public bool obstacles = false; 

但是,這是什麼行約:

obstacles = obstacles ? false : true; 

    if (obstacles) 
    { 
     transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    } 

    else 
    { 
     transform.renderer.material.color = Color.white; 
    } 

我知道,如果和其他功能,當有一個障礙,轉材料到指定的顏色,或者如果沒有一個障礙物,將材料變成白色。但是,這條線是什麼:障礙物=障礙物?假:真;

謝謝..對不起,這個新手問題。

+2

我寧願寫代碼'障礙=!obstacles'或去與史蒂夫的做法,但現在你知道它meaans。 – Silvermind

+0

@Silvermind,可能是你的更好 – Steve

+0

@Silvermind:如果我想採納你的建議。代碼就像'if'語句將執行'obstacle'或'obstacle = true','else'語句將執行'!obstacle'或'obstacle = false'。先生,我有什麼不對嗎?是的,現在我已經知道了。感謝你和所有人 – Kaoru

回答

5

?:這就是所謂的ternary operator

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

條件? first_expression:second_expression;

備註

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

第一個表達式和第二個表達式的類型必須是 相同,或者必須存在從一個類型到另一個類型的隱式轉換。

從MSDN的例子清楚:

int input = Convert.ToInt32(Console.ReadLine()); 
string classify; 

// if-else construction. 
if (input < 0) 
    classify = "negative"; 
else 
    classify = "positive"; 

// ?: conditional operator. 
classify = (input < 0) ? "negative" : "positive"; 

由於吊杆正確地指出的那樣,你可以嘗試這樣使用的if else語句來你想要完成的任務:

if (!obstacles) 
{ 
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    obstacles = true; 
} 

else 
{ 
    transform.renderer.material.color = Color.white; 
    obstacles = false; 
} 
2

該行基本上將「障礙」變量的值「翻轉」爲相反的值。如果障礙是真的,它將其值改爲假,反之亦然。所以,這段代碼的作者可能試圖在這裏畫一個類似於交錯模式的東西。

1
?: called ternary operator 

功能:

​​

裝置

if(Condition== true) 
value=value1; 
else 
value=value2; 

您的代碼:

public static bool obstacles = true; 
bool value=(obstacles = obstacles) ? false : true; 

輸出:value=false

您的expression => (obstacles = obstacles)總是評估爲obstacles中的任何值,因此這裏是true。 因此這裏的第一個值false將分配給您的variablevalue

4

所有的答案解釋了什麼是三元操作符,他們都是正確的,但每個人都沒有注意到房間裏的大象。爲什麼不刪除三元運算符和上面寫的

if (!obstacles) 
{ 
    // Enter the if with obstacles = false, but execute the code for true then flip obstacles 
    transform.renderer.material.color = new Color(.5f, .5f, 0.0f); 
    obstacles = true; 
} 

else 
{ 
    // Enter the else with obstacles = true, but execute the code for false then flip obstacles 
    transform.renderer.material.color = Color.white; 
    obstacles = false; 
} 
+1

爲什麼不簡單'障礙=!障礙'? –

+0

@SimonWhitehead,因爲我沒有想到它:-)看到上面Silvermind的評論。 – Steve