私の場合、C# を使用していますが、質問の概念は Java にも当てはまります。うまくいけば、答えは両方の言語をカバーするのに十分一般的です. それ以外の場合は、質問を 2 つに分割することをお勧めします。
私はいつもどちらがより良い習慣であるかを考えてきました。
コンパイラは、パフォーマンスが「最初の」コードと同じくらい良好になるように、「2 番目の」コードを強化しますか?
「より良いパフォーマンス」と「最適化された」コードを同時に取得するために回避できますか?
冗長/パフォーマンス向上コード:
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)」を 1 回だけ実行するため、明らかに「最初の」コードの実行時間は短くなります。一方、「2 番目の」コード (より優れています) は、反復ごとに条件を実行します。
ループ実行時間が短い場合ではなく、長いループ実行時間を考慮してください。短い場合とパフォーマンスに違いがないことはわかっています。