Dovrei preoccuparmi di spostare gli invarianti dall'ambito del ciclo se peggiora la leggibilità del codice?
Diamo un'occhiata a un semplice esempio:
for (var i = 0; i < collection.Count; i++)
{
...
}
vs.
var collectionCount = collection.Count;
for (var i = 0; i < collectionCount; i++)
{
...
}
La performance del secondo pezzo di codice è migliore o uguale alla prima. Sarà uguale solo se la raccolta è fissa e il conteggio non viene calcolato ogni volta. Sarà molto meglio se, per esempio, la raccolta è una lista collegata che non memorizza nella cache la sua lunghezza.
Comprendo che il secondo approccio difficilmente ucciderà le prestazioni delle mie applicazioni (è molto più probabile che si verifichi una query SQL inefficiente) ma allo stesso tempo non mi sento a mio agio quando scrivo il secondo pezzo di codice manco (piccolo) ottimizzazione. Ma allo stesso tempo dal punto di vista della leggibilità mi piace il primo pezzo di codice in più (meno righe di codice, meno variabili).
Suppongo che sia una cosa da poco, e forse non vale la pena discuterne, ma mi piacerebbe sentire la tua opinione.