Subir las condicionales dentro de una función
- Si hay una condición
if dentro de una función, conviene considerar moverla al llamador (caller).
- En lugar de que la función verifique internamente las precondiciones y, si no se cumplen, “no haga nada”, se hace que el llamador verifique las precondiciones para garantizar mediante tipos que dichas precondiciones sí se cumplen.
- En particular, “subir” las precondiciones puede reducir la cantidad total de verificaciones, y esa es una de las motivaciones de esta regla.
Bajar los bucles
- Es una regla que surge del pensamiento orientado a datos: introduce el concepto de “batch” de un objeto, toma las operaciones por lote como caso base y trata la versión escalar como un caso especial de la versión por lote.
- La principal ventaja es la mejora de rendimiento, ya que permite amortizar el costo de arranque y tener flexibilidad en el orden del procesamiento.
- Por ejemplo, en la multiplicación de polinomios basada en FFT, evaluar un polinomio en varios puntos al mismo tiempo puede ser más rápido que hacer evaluaciones individuales.
Opinión de GN⁺
- Lo más importante de este artículo son dos reglas de programación para mejorar el rendimiento y la claridad del código en el desarrollo de software: “subir las condicionales” y “bajar los bucles”.
- Estas reglas ayudan a mejorar la legibilidad del código, optimizar el rendimiento y reducir la probabilidad de que aparezcan bugs.
- Como ofrece ideas sobre cómo manejar la complejidad de la ingeniería de software y escribir código eficiente, este artículo resulta interesante y útil para muchos desarrolladores.
1 comentarios
Opiniones de Hacker News
ify losfor.forpuede reducir el tiempo de ejecución de una simulación de 1 semana a 1 hora. Quienes vienen de ese entorno optimizan de forma instintiva el orden de losfory losif.if, ya que hace que las precondiciones y postcondiciones de una función dejen de ser visibles directamente en la definición de la función. En proyectos grandes, estas funciones pueden reutilizarse fuera del contexto previsto y causar errores. Usar un framework de contratos puede ser una solución, aunque obliga a escribir las condiciones dos veces: en el contrato y en el código.ifdeben estar al inicio de la función, no al final, y los errores deben propagarse correctamente.forcomo las sentenciasifson operaciones de control de flujo, por lo que algunas afirmaciones del artículo parecen no tener sentido. Las afirmaciones sobre rendimiento son las más sólidas, pero en un consejo general deberían considerarse al final.ifhacia arriba cuando la condición suele depender delwalrus.ifde precondición al llamador es una idea terrible. En casos especiales puede ser buena idea, pero en general no se desea eso. En las librerías, las precondiciones deben verificarse en el límite externo para que la implementación interna pueda avanzar sin suposiciones internas. Depender de que el llamador haga la verificación anula el propósito.