2013-11-24 7 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; 
    } 

Я знаю, что если и еще функция, когда есть препятствия, повернуть материал к заданному цвету, или, если это не препятствия, превратите материал в белый цвет. Но что это за линия: препятствия = препятствия? false true;

Спасибо .. Извините за этот вопрос новичка.

+2

Я предпочел бы написать 'препятствия! = Obstacles' или идти с подходом Стива, но теперь вы знаете, что это meaans. – Silvermind

+0

@ Сильвермонд, возможно, ваш лучше – Steve

+0

@ Сильверминд: так что, если я хочу принять ваш совет. Код будет похож на оператор 'if', который выполнит' препятствия' или 'препятствия = true',' else' оператор выполнит '! Препятствия' или' препятствия = ложь'. Я ошибаюсь в какой-то строке сэр? Да, теперь я это уже знаю. Спасибо вам и всем – Kaoru

ответ

5

?: Это называется ternary operator

Условного Оператором (? :) возвращает одно из двух значений в зависимости от значения логического выражения. Ниже приведен синтаксис для условного оператора .

состояние? first_expression: second_expression;

Замечания

условие должно вычисляться истинным или ложным. Если условие истинно, first_expression оценивается и становится результатом. Если условие равно false, то выражение second_expression вычисляется и становится результатом. Вычисляется только один двух выражений.

Либо тип выражения first_expression и 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"; 

Как Steeve правильно указал, вы можете попробовать, как это с помощью, если другое заявление, что вы хотите достичь:

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

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

Эта строка в основном «переворачивает» значение переменной «препятствия» в противоположное значение. Если препятствия верны, это изменяет значение на false и наоборот. Таким образом, автор этого кода, вероятно, пытается нарисовать что-то похожее на чередующийся шаблон здесь.

1
?: called ternary operator 

функциональность:

var value= (Condition/Expression)? value1 :value2; 

означает

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

Смежные вопросы