Dejo premature optimization a un lado.
"La optimización prematura es la raíz de todos los males" - Donald Knuth
Hay que ir para mantenimiento en primer lugar. Agrúpelos de la manera que tenga más sentido teniendo en cuenta la estructura lógica del código (como agrupar declaraciones relacionadas entre sí).
Si luego determina que el rendimiento es un problema, intente medir con algo así como un generador de perfiles para ver dónde están los cuellos de botella. Lo más probable es que no esté allí. De código completo 2:
Barry Boehm informa que el 20 por ciento de rutinas de un programa consumen el 80 por ciento de su tiempo de ejecución. En su artículo clásico "Un estudio empírico de Fortran Programs", Donald Knuth encontró que menos del cuatro por ciento de un programa generalmente representa más de el 50 por ciento de su tiempo de ejecución.
No debemos tratar de adivinar dónde optimizar antes de que sea necesario, ya que la mayoría de nosotros somos realmente malos para adivinar dónde está esa porción lenta de nuestro código. Los programadores que optimizan a medida que avanzan también gastan aproximadamente el 96% de su tiempo optimizando el código que no necesita optimizarse. Otra cosa a tener en cuenta es que la sintonización de código (como en este ejemplo) considera un compromiso entre la legibilidad y facilidad de mantenimiento para la prestación del servicio:
Centrándose en la optimización durante el desarrollo inicial resta valor a lograr otros objetivos del programa. Los desarrolladores se sumergen en el análisis de algoritmo y los debates arcanos que al final no aportan mucho valor al usuario. Las preocupaciones como corrección, ocultamiento de información y legibilidad se convierten en objetivos secundarios, aunque el rendimiento es más fácil de mejorar más tarde que estas otras preocupaciones. El rendimiento post hoc generalmente afecta a menos de cinco por ciento del código de un programa. ¿Podría regresar y realizar el trabajo de rendimiento en el cinco por ciento del código o el trabajo de legibilidad en el 100 por ciento?
No estoy diciendo que no optimizar, pero código Optimizar sólo en el extremo, cuando se tiene el lujo de la gran imagen y herramientas para señalarle en la dirección correcta.
EXTRA: Para responder a la cuestión de la representación en sí misma, sin embargo:
Este [ "unswitching" el código] es bueno para alrededor de un 20 por ciento de ahorro de tiempo:
Language Straight Time Code-Tuned Time Time Savings
C++ 2.81 2.27 19%
Java 3.97 3.12 21%
Visual Basic 2.78 2.77 <1%
Python 8.14 5.87 28%
Un peligro distinto de este caso es que los dos bucles deben mantenerse en paralelo. [...] debe recordar cambiar el código en ambos lugares, lo cual es una molestia para usted y un dolor de cabeza de mantenimiento para cualquier otra persona que tenga que trabajar con el código.
Este ejemplo también ilustra un desafío clave en el ajuste de código: el efecto de cualquier ajuste de código específico no es predecible. El ajuste del código produjo mejoras significativas en tres de los cuatro idiomas, pero no en Visual Basic. Para realizar esta optimización específica de en esta versión específica de Visual Basic se produciría un código menos sostenible sin ninguna ganancia de compensación en el rendimiento. La lección general es que debe medir el efecto de cada optimización específica para asegurarse de su efecto - no hay excepciones .
Compruebe this other pregunta aquí en SO. Y this de la primera edición de Code Complete.
¿Cambia $ bool por algo en cualquiera de los bucles? –
$ bool es una variable estática que no cambia. – Timmy
No hagas un 'si else' para cada iteración del ciclo' foreach'. El segundo ejemplo es definitivamente el camino a seguir. – JohnB