Everybody knows that a good programmer writes reuseable code.
If somebody writes the same instruction sequence twice she/he will extract it to a method and the code becomes reuseable.
But how about data? Reuse it too!
for (int i = 0; i < array.Length - 1; i++)
{
if (array[i] > array[i + 1])
{
sum = array[i] + array[i + 1];
}
}
Depending on array’s content You will index array four times in every cycle instead of the two necessary.
Indexing an array is a cpu instruction, very fast, but imagine if it is a List and not an array!
The List implementation may switch to linked items and it becomes a lot of dereferencing steps to reach the item at specific index.
Go further:
if (MyObject1.AnObjectProperty.ItsSubProperty.Value > MyObject2.AnObjectProperty.ItsSubProperty.Value)
{
sum = MyObject1.AnObjectProperty.ItsSubProperty.Value + MyObject2.AnObjectProperty.ItsSubProperty.Value;
}
How many times should the object graph walked down to Value property? What happens if the properties in path are calculated ones and not just field wrappers?
Go further:
for (int i = 0; i < array.Length - 1; i++)
{
if (CalculateValue(i) > CalculateValue(i+1))
{
sum = CalculateValue(i) + CalculateValue(i + 1);
}
}
We are calculating values twice!
Think about how Your code will be executed, not only what You should accomplish!
See my Think Runtime Principle.