Perché non entrambi?
Prima di tutto, "descrittivo" e "verboso" non sono la stessa cosa. Ad esempio, se stai scrivendo un ciclo abbastanza locale, i
è un nome di variabile molto buono per la variabile di ciclo; current_iteration_index
, mentre discutibilmente più descrittivo e decisamente più verboso, è molto peggio e non aggiunge alcuna informazione, perché l'uso di i
come variabile di ciclo è praticamente universalmente accettato, e non c'è altro significato in i
di quello.
I buoni nomi delle variabili sono descrittivi, in quanto un programmatore che conosce l'idioma del linguaggio e le convenzioni del codice base possono facilmente intuire quale sia il loro ruolo, ma sono anche abbastanza concisi da mantenere le cose compatte.
Il limite di 80 caratteri, mentre in origine era una conseguenza delle limitazioni tecniche dei terminali di testo degli anni '70, è ancora apprezzato da molti oggi e anche se ci sono ancora ragioni tecniche (lunghezza massima delle linee in alcuni protocolli di rete, in particolare e-mail correlati), le ragioni più interessanti sono quelle psicologiche e sociali. Si scopre che le lunghezze della linea attorno al segno di 66 caratteri rendono l'esperienza di lettura più comoda per la prosa in linguaggio naturale (la dimensione del carattere non fa molta differenza, e di conseguenza, né lo schermo né le dimensioni della carta); I limiti di 80 caratteri sono abbastanza vicini a questo, ma dato che la maggior parte di un tipico pezzo di codice è solitamente rientrata di almeno uno o due livelli (che significa tra 4 e 16 caratteri, a seconda delle impostazioni di indentazione), ci ritroviamo con qualcosa è molto vicino a 66 (tra 64 e 76 caratteri).
Un altro effetto di attenersi a linee di 80 caratteri è che è un buon indicatore di quando le cose sono troppo complicate. Le righe lunghe di solito sono causate da uno dei seguenti:
- Funziona con una lunga lista di argomenti; non è una cosa bella da avere, perché impediscono la leggibilità e possono facilmente causare bug sottili, ad es. quando le persone scambiano l'ordine degli argomenti in un modo che il compilatore non cattura.
- Espressioni complesse, che si trovano spesso in condizioni condizionali (ad esempio
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 scomposta in un metodo o funzione.
- Caratteri letterali lunghi utilizzati in chiamate di funzione o espressioni, ad es. %codice%. Sposta il letterale in una variabile o costante; potrebbe comunque superare la lunghezza della linea, ma se lo si fa in modo coerente, il lettore può almeno ignorare la parte invisibile della linea, presumendo che solo il resto del letterale segua. O meglio ancora, sposta i letterali dal codice e in un archivio dati esterno (file, database, qualunque cosa).
- Dichiarazioni profondamente annidate, ad es. sei livelli di istruzioni
print(translate(LANG_EN, LANG_ES, "This is the home page. Feel welcome to click around and see what we have."));
in un metodo di classe (ovvero 32 colonne di indentazione per le impostazioni tipiche). Ancora una volta, la nidificazione profonda rende il codice complesso e difficile da leggere, e dovrebbe essere evitato come la piaga - metti semplicemente, il nidificazione profonda trabocca dallo stack del cervello umano durante la lettura.
Tutti questi sono in definitiva i sintomi di cose che non avresti nel tuo codice base nel lungo periodo, e far rispettare i limiti di 80 caratteri è un modo semplice e carino che aiuta a ridurre la complessità e la leggibilità. (Questo non vuol dire che non si possa scrivere codice perfettamente illeggibile in 80 colonne: i vari contest offuscati-qualcosa-codice sono un chiaro contro-esempio).