2014-02-13 3 views
3

Итак, я смотрел на Inline if-statement, который использует Ternary Operators. В основном это мой текущий код, который я хочу сделать более компактным.Оператор Inline if-else с несколькими вариантами выбора

private void Move(Vector3 direction) { 
    if(direction != Vector3.back && direction != Vector3.forward) 
     transform.Rotate(0,(direction == Vector3.right ? 90 : -90),0); 
    else 
     transform.Rotate(0,(direction == Vector3.back ? 180 : 0),0); 

    transform.Translate(Vector3.forward, Space.Self); 
} 

То, что я действительно хочу, это что-то уплотняется так:

private void Move(Vector3 direction) { 
    transform.Rotate(0,(direction == Vector3.right ? 90 : -90 || direction == Vector3.back ? 180 : 0),0); 
    transform.Translate(Vector3.forward, Space.Self); 
} 

Есть ли вообще это делать? Просто возьмите это пример. Я хочу знать, как скомпилировать несколько встроенных if-операторов, поэтому мне не нужно иметь больше строк кода без каких-либо причин, если я могу его избежать.

Спасибо, что нашли время, чтобы прочитать мой вопрос.

ответ

3

Это не совсем то, что вы просили, но в интересах сделать метод более компактным, возможно, попробуйте следующее:

public enum Direction 
{ 
    Left = -90, 
    Right = 90, 
    Forward =0, 
    Back = 180 
} 

private void Move(Direction direction) 
{ 
    transform.Rotate(0,(int)direction,0); 
    transform.Translate(Vector3.forward, Space.Self); 
} 
+0

Это именно то, что мне нужно. Очень компактный, очень расширяемый. Я ценю это, я даже не думал об этом. –

1

Я бы сказал, что первый из них достаточно компактен. Если перечисление Vector3 имеет 4 значения, ваш второй пример не будет работать. И заставить его работать может выглядеть так же долго, как первый пример.

private void Move(Vector3 direction) 
{ 
    transform.Rotate(0, 
     direction == Vector3.right ? 90 : 
      (direction == Vector3.left ? -90 
       (direction == Vector3.back ? 180 : 0)), 0); 
    ... 
} 

Тройная операция является наиболее «компактной», когда у вас есть только два значения для проверки.

Например:

Color color; 

if (title == "VIP") 
    color = Color.Red; 
else 
    color = Color.Blue; 

становится:

var color = (title == "VIP" ? Color.Red : Color.Blue); 
+2

Ваш метод является правильным, но не очень компактным. Именно поэтому я не выбрал ваш ответ на основе компактности и расширяемости. Ниже был ответ, который я принял, поскольку его идея проста, компактна и приемлема. Но я ценю ваше время и силы! –

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