Clarity gana sobre la brevedad todos los días, en mi opinión. A veces siento que escribir código como:
if(!(x = func(y)) && ++z == x)
... es el equivalente a rayas más rápidas en un automóvil. Puede sentirse rápido, pero no lo es. Tampoco creo que usar nombres de variables incomprensibles (como en el ejemplo anterior) para ahorrar en tipeo sea una buena idea.
¿Cuál es mejor aquí:
for(int x(0) x < managers.size(); ++x)
managers[x]->initialise();
o:
for(int mgr(0); mgr < managers.size(); ++mgr)
managers[mgr]->initialise();
Ambos logran la misma cosa y se podría argumentar que no tiene sentido hacer mgr
más clara (incluso hay otros argumentos para decir mgr
debe ser más claro :)).Pero si alguna vez esta parte de la rutina se vuelve más complicado, que podría ser muy importante:
for(int mgr(0); mgr < managers.size(); ++mgr)
{
for(int dependentMgr(0); dependentMgr < managers[mgr].dependents().size(); ++dependentMgr)
{
// init these first
}
}
Obviamente, esto no es una discusión sobre la conveniencia de utilizar iteradores o no, simplemente si debemos usar nombres claros o no.
Cuando miro un código que no he visto antes, los nombres de las variables son todo. Me estremezco cuando veo tmp
y tempt2
y vec2
. No significan nada.
Hablando en serio, si te preocupa la cantidad que estás escribiendo, consiguen un IDE con autocompletar o ir criar pollos en Fiji :)
Absolutamente, solo tenga cuidado de obtener la lógica correcta, ya que su primer ejemplo no es equivalente a su segundo ejemplo. –
sí, tenga cuidado con el orden de las operaciones. –
No hace ninguna diferencia para el compilador y el código generado será absolutamente idéntico. Por lo tanto, debes escribir tu fuente para que sea lo más clara posible para los humanos. –