所以,我在这里初始化了一些变量。
var center = Vector2.Zero; // For sample purpose, the real one gain the value dynamically.
var size = 1F;
var sizeHalf = size / 2; // The `size` variable will be like readonly after initialization in my project.
var angle = 30F;
var anCos = Mathf.Cos(angle);
var anSin = Mathf.Sin(angle);
有关详细信息,
Vector2
为struct
且不为class
。
我有四个Vector2
变量,我这样初始化。
var b = new Vector2 (center.x , center.y - sizeHalf);
var t = new Vector2 (center.x , center.y + sizeHalf);
var l = new Vector2 (center.x - sizeHalf , center.y);
var r = new Vector2 (center.x + sizeHalf , center.y);
// Re-assign to get the adjusted values
b = new Vector2 (b.x , (b.x * anCos) + (b.y * anSin));
t = new Vector2 (t.x , (t.x * anCos) + (t.y * anSin));
l = new Vector2 ((l.x * anCos) - (l.y * anSin) , l.y);
r = new Vector2 ((r.x * anCos) - (r.y * anSin) , r.y);
所以,回到我的问题,
如果不是,我应该做这样的事吗?
// Temporary variable to store most used calculated variable
var pB = center.y - sizeHalf;
var pT = center.y + sizeHalf;
var pL = center.x - sizeHalf;
var pR = center.x + sizeHalf;
var b = new Vector2 (center.x, (center.x * anCos) + (pB * anSin));
var t = new Vector2 (center.x, (center.x * anCos) + (pT * anSin));
var l = new Vector2 ((pL * anCos) - (center.y * anSin), center.y);
var r = new Vector2 ((pR * anCos) - (center.y * anSin), center.y);
或者有没有比我上面提到的更好的方法?
感谢。
编辑:
在我的代码中,我使用var
而不是真正的TypeName
,这是因为我在一个函数中编写了这个代码,只是在该范围内使用,甚至更小的范围(在该函数中,我有一些) if
并且只在if
内部使用它,并且为了简单和更快的变量编写,它是一个简单的函数,所以我认为使用var
就足够了。
答案 0 :(得分:14)
多次进行变量初始化...
首先,让我们正确使用单词。当你初始化某事两次时会发生什么事情是不连贯的,因为根据定义,初始值被分配变量的初始时间已分配。也就是说,第一次时间。
当第二个作业转过来时,该变量已经初始化;第二个任务不会再次初始化它; 它已经有了初始值。
但你的意思是说“已分配”,我理解。
是不是像这样好的方法做了一次变量赋值,在内存和性能方面还好吗?
对我来说似乎很好。
您是否遇到内存或性能问题?
如果你是的话,这不是我先看的地方之一。 我会使用分析器来检查我的记忆和性能特征。
由于表现几乎肯定无关紧要,你应该问的问题是:
使用单一赋值形式的第二种技术是否会以其他方式更好?
是。 您应该使用单一作业表格,如果合理可能,每个变量都会被分配一次。
原因与内存或性能无关。原因是因为更容易阅读,理解,调试和维护变量不经常更改的代码。在初始化时仅更改一次的变量是理想的。你永远不需要想知道它曾经拥有多少价值,你永远不需要想知道它有多少次变异,并且你可以给你的变量描述名称,其含义不随着控制在你的方法中的进展而改变。
答案 1 :(得分:-1)
绝对没问题。 就堆栈中的变量数量而言,第一个选项更好。