Utilizo funciones en parte como una forma de documentar el código. Llamar a una función con un nombre significativo facilita la comprensión del código. En algunos casos, incluso una función con una sola línea tiene sentido.
Por ejemplo, en "Código limpio", Robert C. Martin da el siguiente ejemplo: ¿Cuál preferiría ver? Esta:
// Check to see if the employee is eligible for full benefits
if ((employee.flags & HOURLY_FLAG) &&
(employee.age > 65))
¿O esto?
if (employee.isEligibleForFullBenefits())
No siempre estoy de acuerdo con él, pero en este caso sí. El código debe ser legible, no solo cuando lo escribe y conoce todos los detalles, sino también a las 9 p.m., cuando tiene que corregir errores en el código de otra persona. No se recomienda mirar fijamente una condición prolongada e intentar descubrir todos los negativos dobles. Si solo puede ponerle un nombre (no solo las condiciones, sino cada pieza de código que escriba), se volverá mucho más simple.
Nunca me he arrepentido de poner algo en una función, y si te preocupa el rendimiento, primero perfila.