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.