Digamos que tengo una serie de corredores con los que necesito encontrar el corredor más alto, el corredor más rápido y el corredor más ligero. Parece que la solución más legible sería:
runners = getRunners();
tallestRunner = getTallestRunner(runners);
fastestRunner = getFastestRunner(runners);
lightestRunner = getLightestRunner(runners);
... donde cada función itera sobre los corredores y realiza un seguimiento de la altura más grande, la mayor velocidad y el peso más bajo. Sin embargo, iterar sobre la matriz tres veces no parece una muy buena idea. En cambio, sería mejor hacer:
int greatestHeght, greatestSpeed, leastWeight;
Runner tallestRunner, fastestRunner, lightestRunner;
for(runner in runners){
if(runner.height > greatestHeight) { greatestHeight = runner.height; tallestRunner = runner; }
if(runner.speed > ...
}
Si bien esto no es demasiado ilegible, puede ser complicado cuando hay más lógica para cada pieza de información que se extrae en la iteración.
¿Cuál es el término medio aquí? ¿Cómo puedo usar solo una iteración mientras mantengo el código dividido en unidades lógicas?
fuente