与其使用 if,不如编写一个 'equation' 来提供您想要的结果会更好吗? (在有意义的情况下)
Instead of using if's, would it better to write an 'equation' that gives you the results you want? (in cases where it makes sense)
而不是:
float dotProduct = Vector3.Dot(dir, transform.right);
int front = 0;
int back = 0;
if (dotProduct > 0)
{
// right
front = 1;
back = -1;
}
else if (dotProduct < 0)
{
// left
front = -1;
back = 1;
}
Rotate(front, back, angle);
有类似的东西
float dotProduct = Vector3.Dot(dir, transform.right);
int front = Mathf.Abs(dotProduct) ...;
int back = Mathf.Abs(dotProduct) ...;
Rotate(front, back, angle);
呃,我知道 int front = Mathf.Abs(dotProduct) ...;
不会给我 1 或 -1,但我想你明白我在想什么,而不是使用 if,我会 "funneling" 通过一个会给我 1 或 -1 的等式。
我要么希望你提出有问题的真实例子,要么就不要理会它,除非你想做一些超出 if/else
的事情。您的原始代码很好。但是,它可以用更短的方式编写。那是使用 ternary
运算符。
float dotProduct = Vector3.Dot(dir, transform.right);
int front = dotProduct > 0 ? 1 : -1;
int back = dotProduct < 0 ? 1 : -1;
Rotate(front, back, angle);
您只看到 4 行。几乎每个程序员都知道三元运算符。因此,此新代码不会为您的同行带来任何复杂性。事实上它更干净。
而不是:
float dotProduct = Vector3.Dot(dir, transform.right);
int front = 0;
int back = 0;
if (dotProduct > 0)
{
// right
front = 1;
back = -1;
}
else if (dotProduct < 0)
{
// left
front = -1;
back = 1;
}
Rotate(front, back, angle);
有类似的东西
float dotProduct = Vector3.Dot(dir, transform.right);
int front = Mathf.Abs(dotProduct) ...;
int back = Mathf.Abs(dotProduct) ...;
Rotate(front, back, angle);
呃,我知道 int front = Mathf.Abs(dotProduct) ...;
不会给我 1 或 -1,但我想你明白我在想什么,而不是使用 if,我会 "funneling" 通过一个会给我 1 或 -1 的等式。
我要么希望你提出有问题的真实例子,要么就不要理会它,除非你想做一些超出 if/else
的事情。您的原始代码很好。但是,它可以用更短的方式编写。那是使用 ternary
运算符。
float dotProduct = Vector3.Dot(dir, transform.right);
int front = dotProduct > 0 ? 1 : -1;
int back = dotProduct < 0 ? 1 : -1;
Rotate(front, back, angle);
您只看到 4 行。几乎每个程序员都知道三元运算符。因此,此新代码不会为您的同行带来任何复杂性。事实上它更干净。