Dire che ho una serie di corridori con cui ho bisogno di trovare il corridore più alto, il corridore più veloce e il corridore più leggero. Sembra che la soluzione più leggibile sia:
runners = getRunners();
tallestRunner = getTallestRunner(runners);
fastestRunner = getFastestRunner(runners);
lightestRunner = getLightestRunner(runners);
.. dove ogni funzione scorre sui corridori e tiene traccia dell'altezza maggiore, della massima velocità e del peso più basso. L'iterazione sull'array tre volte, tuttavia, non sembra un'ottima idea. Sarebbe invece meglio fare:
int greatestHeght, greatestSpeed, leastWeight;
Runner tallestRunner, fastestRunner, lightestRunner;
for(runner in runners){
if(runner.height > greatestHeight) { greatestHeight = runner.height; tallestRunner = runner; }
if(runner.speed > ...
}
Anche se questo non è troppo illeggibile, può diventare complicato quando c'è più logica per ogni informazione che viene estratta nell'iterazione.
Qual è la via di mezzo qui? Come posso utilizzare solo una singola iterazione mantenendo il codice diviso in unità logiche?