就我而言,我使用的是 C#,但问题的概念也适用于 Java。希望答案足够通用以涵盖两种语言。否则最好将问题分成两部分。
我一直在想哪个是更好的做法。
编译器是否负责增强“第二”代码,使其性能与“第一”代码一样好?
是否可以同时获得“更好的性能”和“优化”的代码?
冗余/更好的性能代码:
string name = GetName(); // returned string could be empty
List<string> myListOfStrings = GetListOfStrings();
if(string.IsNullOrWhiteSpace(name)
{
foreach(string s in myListOfStrings)
Console.WriteLine(s);
}
else
{
foreach(string s in myListOfStrings)
Console.WriteLine(s + " (Name is: " + name);
}
优化/性能较差的代码:
string name = GetName(); // returned string could be empty
List<string> myListOfStrings = GetListOfStrings();
foreach(string s in myListOfStrings)
Console.WriteLine(string.IsNullOrWhiteSpace(name) ? s : s + " (Name is: " + name);
显然,“第一个”代码的执行时间更少,因为它在每个循环中只执行一次条件“string.IsNullOrWhiteSpace(name)”。而“第二”代码(更好)在每次迭代时执行条件。
请考虑较长的循环执行时间而不是较短的循环执行时间,因为我知道当它很短时,性能不会有所不同。