Questa è praticamente l'unica regola di formattazione del codice che ho trovato in realtà ha un impatto notevole sulla leggibilità e non richiede quasi sforzo (supponendo che il tuo editor di codice non inizi a litigare con te su di esso).
È buona norma progettare un linguaggio di programmazione per far apparire i nomi in una posizione coerente nelle dichiarazioni / definizioni. La logica è semplice: hai una bella ancora visiva (una parentesi graffa o solo una rientranza sospesa) che puoi usare per trovare immediatamente l'inizio del nome. Non è necessario analizzare effettivamente la lingua durante la scansione di un file per trovare il nome.
È lo stesso di quando stai formattando un documento: quando inizi una nuova sezione metti il nome in grassetto - spesso sulla sua stessa linea - non sepolto da qualche parte, indifferenziato, in una lunga frase.
I primi C avevano firme molto concise: i tipi di restituzione erano facoltativi e i tipi di argomento venivano dichiarati dopo la firma. Anche i nomi tendevano ad essere molto brevi. Ciò ha mitigato l'impatto di un tipo di ritorno occasionale che compensa il nome.
double dot(x, y);
È ancora abbastanza digeribile.
Il C ++ ha peggiorato le cose. Ha spostato le specifiche del tipo di argomento in firme allungando le firme. Questa sintassi è stata successivamente adottata durante la standardizzazione di C.
static struct origin *find_origin(struct scoreboard *sb,
struct commit *parent,
struct origin *origin)
è meno digeribile, ma non troppo male. (Estratto da Git)
Ora considera le moderne pratiche di programmazione con nomi lunghi e descrittivi e tipi parametrizzati e vedi come questa scelta è diventata disastrosa. Un esempio da un'intestazione Boost:
template <class A1, class A2, class A3, class A4, class A5, class A6>
inline typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type make_policy(const A1&, const A2&, const A3&, const A4&, const A5&, const A6&)
{
typedef typename normalise<policy<>, A1, A2, A3, A4, A5, A6>::type result_type;
return result_type();
}
Se stai scrivendo un codice generico, firme del genere non sono nemmeno fuori dal comune. Puoi trovare esempi di casi molto peggiori di questo senza provarci troppo.
C, C ++ e i loro derivati, Java e C #, sembrano essere le eccezioni ad avere dichiarazioni / definizioni leggibili. I loro predecessori e colleghi popolari (Fortran, ALGOL, Pascal) hanno posto i nomi prima dei tipi di risultati e, per fortuna, molti dei loro successori (Go, Scala, TypeScript e Swift per citarne alcuni) hanno scelto anche sintassi più leggibili.