Perché non entrambi?
Innanzitutto, "descrittivo" e "verboso" non sono gli stessi. Ad esempio, se stai scrivendo un ciclo abbastanza locale, i
è un nome di variabile molto buono per la variabile di ciclo; current_iteration_index
, sebbene discutibilmente più descrittivo e decisamente più dettagliato, è molto peggio e non aggiunge alcuna informazione, perché l'uso di i
come una variabile di loop è praticamente universalmente accettato e non ha altro significato i
.
I nomi di buone variabili sono descrittivi, in quanto un programmatore che ha familiarità con il linguaggio del linguaggio e le convenzioni del codebase può facilmente indovinare quale sia il loro ruolo, ma sono anche abbastanza concisi da mantenere le cose compatte.
Il limite di 80 caratteri, sebbene originariamente una conseguenza delle limitazioni tecniche dei terminali di testo degli anni '70, è ancora valutato da molti oggi, e anche se ci sono ancora ragioni tecniche (lunghezze massime delle linee in alcuni protocolli di rete, in particolare relative alla posta elettronica), le ragioni più convincenti sono quelle psicologiche e sociali. Si scopre che le lunghezze di linea attorno al segno di 66 caratteri rendono l'esperienza di lettura più comoda per la prosa in linguaggio naturale (le dimensioni del carattere in modo interessante non fanno molta differenza, e di conseguenza, né lo schermo né le dimensioni della carta); I limiti di riga di 80 caratteri sono abbastanza vicini a quello, ma poiché la maggior parte di un tipico pezzo di codice è di solito rientrata di almeno uno o due livelli (il che significa tra 4 e 16 caratteri, a seconda delle impostazioni di rientro),
Un altro effetto di attenersi alle linee di 80 caratteri è che è un buon indicatore di quando le cose sono troppo complicate. Le linee così lunghe sono generalmente causate da una delle seguenti:
- Funziona con un lungo elenco di argomenti; questa non è una buona cosa, perché impediscono la leggibilità e possono facilmente causare bug sottili, ad esempio quando le persone scambiano l'ordine degli argomenti in modo che il compilatore non riesca a catturarlo.
- Espressioni complesse, spesso presenti nei condizionali (ad es.
if ((user.isLoggedIn && user.hasPermission(page.getRequiredPermission()) && !user.isBanned) || page.getRequiredPermission() == null)
); anche questo di solito è piuttosto difficile da decifrare e il codice dovrebbe essere riscritto in qualcosa di più strutturato. Molto probabilmente, l'espressione fa troppo e dovrebbe essere fattorizzata in un metodo o una funzione.
- Letterali lunghi utilizzati nelle chiamate di funzione o nelle espressioni, ad es
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
. Sposta il letterale in una variabile o costante; potrebbe comunque superare la lunghezza della linea, ma se lo fai in modo coerente, il lettore può almeno tranquillamente ignorare la parte invisibile della linea, supponendo che segua solo il resto del letterale. O meglio ancora, sposta i valori letterali fuori dal codice e in un archivio dati esterno (file, database, qualunque cosa).
- Dichiarazioni profondamente annidate, ad esempio sei livelli di
if
istruzioni in un metodo di classe (ovvero 32 colonne di rientro per impostazioni tipiche). Ancora una volta, l'annidamento profondo rende il codice complesso e difficile da leggere e dovrebbe essere evitato come la peste - in parole semplici, l'annidamento profondo trabocca nello stack del cervello umano durante la lettura.
Tutti questi sono in definitiva sintomi di cose che preferiresti non avere nella tua base di codice a lungo termine, e applicare limiti di 80 caratteri è un modo piacevole e semplice che aiuta a mantenere bassa la complessità e la leggibilità. (Questo non vuol dire che non puoi scrivere un codice perfettamente illeggibile in 80 colonne: i vari concorsi offuscati-qualcosa-codice sono un chiaro contro-esempio).