Dal punto di vista della classe, sono d'accordo (con la maggior parte delle risposte / commenti) che è più facile capire meglio. Il più delle volte, questa sarà probabilmente la risposta corretta a quella domanda in classe. Ma molti problemi che alla fine incontrerai facendo (citando la tua frase) "codifica professionale" potrebbero non avere una soluzione così semplice. Allora cosa fai allora?
In definitiva, la tua più facile comprensione contro più efficiente è una falsa dicotomia. La buona documentazione in linea è sempre il sine qua non che consente ai maintainer di fare i conti con decine di migliaia di righe di codice che non avevano mai visto prima e dove gli sviluppatori originali di quel codice sono lunghi -sono andato.
Un aspetto della buona documentazione in linea è un grande blocco di commenti di intestazione che precede ciascuna funzione, che descrive e discute il suo scopo, la sequenza chiamante, gli effetti collaterali, gli algoritmi, ecc. Ad esempio, dalla mia piccola lib di funzioni di proiezione,
/* ==========================================================================
* Function: rotatetoz ( l, r, axis, nlines )
* Purpose: xlate, rotate l, returning r as though
* axis were along the z-axis with axis.pt1 at origin
* --------------------------------------------------------------------------
* Arguments: l (I) input LINE * to 3d-lines to be xlated, rotated
* along with axis
* r (O) output LINE * to xlated, rotated 3d-lines
* axis (I) LINE specifying rotation axis,
* with pt1 the tail, and pt2 the head,
* such that pt1 ends up at (0,0,0), and
* pt2 at (0,0,z=r) with r the length of axis
* nlines (I) int containing #lines to be rotated
* Returns: (double) r, the length of axis, or -1.0 for any error
* --------------------------------------------------------------------------
* Notes: o axis is (obviously) not changed, with r xlated, rotated as
* though axis pt1 was at the origin, and pt2 was at (0,0,z=r)
* o to accomplish this, first xlate pt1 of axis to (0,0,0),
* and then...
* z. As per usual spherical polar coords,
* | . x = r*cos(phi)*cos(theta)
* | . y = r*cos(phi)*sin(theta)
* | . z = r*sin(phi), where
* | o(x,y,z) r^2 = x^2 + y^2 + z^2
* |90-phi. |for r-axis
* | . | Then, to rotate axis to positive z-axis,
* | . | o rotate about z-axis by -theta
* |. | to bring axis to x,z-plane
* +--------|---y o rotate about y-axis by -(90-phi)
* / . | / to bring axis coincident with z
* /theta . | / Where we calculate
* / . |/ o sin(phi) = z/r
* x------------+ o sin(theta) = y/(r*cos(phi)) or
* cos(theta) = x/(r*cos(phi))
*
* ======================================================================= */
/* --- entry point --- */
double rotatetoz ( LINE *l, LINE *r, LINE axis, int nlines ) {
/* ---
* lots of code;
* ---------------- */
} /* --- end-of-function rotatetoz() --- */
E il codice stesso è ampiamente commentato, spesso riferendosi alla sintesi / spiegazione dell'algoritmo di cui sopra. Si spera che alcuni futuri manutentori trovino più facilmente la decomposizione del codice un po 'denso in blocchi funzionali. Ma non è mai stata possibile una scelta progettuale "più facile da leggere e più efficiente". E spesso non lo è mai.