Denominazione descrittiva vs. 80 righe di caratteri [chiuso]


17

Sento spesso queste due preziose pratiche di programmazione: (1) le righe di codice devono essere di 80 caratteri o meno e (2) usare nomi descrittivi per variabili, metodi, classi, ecc. Capisco il ragionamento per entrambe queste parole di consiglio, tuttavia , sembrano spesso essere un compromesso reciproco. Se mantengo il mio codice al di sotto di 80 caratteri / riga finisco per usare nomi meno descrittivi (specialmente in Python in cui ogni rientro conta come 4 caratteri) ma se uso nomi più descrittivi, finisco con righe di oltre 80 caratteri.

Quindi, la mia domanda è quale di questi due consigli è più importante rispettare se la scelta deve essere fatta? Mi chiedo questo come programmatore indipendente (hobbista), ma soprattutto dal punto di vista di un ingegnere del software che lavora per un'azienda più grande.


4
@BillyONeal Con grandi schermi, 120 :)
BЈовић,

4
Penso di aver bisogno di almeno 130
9dan

8
Preferisco 80, perché posso quindi facilmente aprire 2 file affiancati sul mio notebook.
Honza Brabec,

5
Linee più lunghe di 80 caratteri tendono a diventare illeggibili. Quindi 80 è un buon limite. Descrittivo non deve essere troppo dettagliato. E dipende dall'ambito: nomi di variabili brevi di ambito piccolo, nomi più lunghi di ambito grande. E senz'altro evitare le variabili con ampio ambito. Se ci sei, usa un linguaggio funzionale e spezza il tuo codice in funzioni più piccole quando rientra troppo in profondità -> ambito molto piccolo == nomi brevi. I nomi delle funzioni sono simili ma di solito un po 'più lunghi perché il loro ambito è più ampio.
Peer Stritzinger,

4
@ ott--: hai visto un editor che può effettivamente spezzare una lunga fila, secondo la sintassi C ++, e presentare la continuazione con rientro di un livello in più rispetto all'inizio? Altrimenti tale suggerimento è inutile.
Jan Hudec,

Risposte:


34

Mantieni pochi trattini, i nomi sono descrittivi e non aver paura di spezzare una linea.

Tieni pochi i trattini.

Spesso quando mi trovo in una lotta tra indentazione e denominazione descrittiva, faccio un passo indietro e guardo il mio livello di incidenza. Se stai rientrando oltre 3 o 4 livelli (2 livelli è automatico e inevitabile in molti casi. Leggi: definizione del metodo di classe), potresti voler ristrutturare il tuo codice, estraendo la funzionalità da una funzione o un metodo.

I tuoi nomi descrittivi

Devi sempre mantenere i tuoi nomi descrittivi. I nomi descrittivi creano un codice autocompensante. Puoi provare ad abbreviare i nomi in alcuni casi, ma la leggibilità viene prima di tutto.

Non aver paura di rompere una linea

Merda succede. Se superi gli 80 caratteri e non vedi comunque di recuperare spazio nella linea, interrompilo. La maggior parte delle lingue non si preoccupa delle interruzioni di riga, quindi suddividi la linea in più. Non solo scegliere una posizione casuale. Mantieni le cose raggruppate logicamente e rientra di un altro livello quando interrompi la linea.


3
Va notato che i nomi descrittivi non sono gli stessi dei nomi lunghi. Evitare la ripetizione di cose che possono essere facilmente viste dal contesto e una manciata di abbreviazioni scelte con cura (solo per i concetti molto comuni) può fare molto per i nomi descrittivi brevi.
Jan Hudec,

18

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 icome 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 ifistruzioni 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).


1
+1: ottima risposta tranne per il fatto che non sono d'accordo con lo spostamento dei letterali dal codice. Quando sai quale letterale stai cercando, puoi cercarlo ugualmente bene nelle risorse o nel codice, ma quando lavori con il codice e devi modificare il letterale, doverlo cercare in un file separato è piuttosto una distrazione. Si noti inoltre che tutte le lingue hanno un modo di dividere i letterali su più righe, cosa che farei in questo caso.
Jan Hudec,

Ovviamente la frase usata come esempio di long letteral non ha spazio nel codice sorgente. Cose come questa vanno nei modelli di pagina. Ma per cose come i messaggi di errore preferisco tenerli con il codice che li emette.
Jan Hudec,

@JanHudec: Certo, spostare i valori letterali in un file di dati non ha sempre senso. Sto parlando di letterali troppo lunghi, e con quelli, raramente ho visto un'occasione in cui definirli altrove avrebbe peggiorato il codice: la lunghezza del testo è dirompente per la lettura, mentre il significato potrebbe essere facilmente condensato in un nome costante o variabile, che poi definisci altrove. I messaggi di errore sono una chiamata di giudizio, immagino.
martedì

16

La denominazione descrittiva è di gran lunga più importante. Nella maggior parte delle interfacce possiamo scorrere per vedere le linee più lunghe. In nessun caso il sistema può aiutarti a tradurre variabili e funzioni con nomi sbagliati.


2
Questo. Smetti di spezzare le linee sui caratteri X, lascia che l'IDE lo gestisca. Altrimenti ti preoccupare tutti gli altri utenti (incluso il futuro!) Che gli schermi / IDE possono gestire caratteri 2 * X con codice che non rientra più in una pagina.
Konerak,

4
Tuttavia, la domanda riguardava implicitamente i nomi lunghi . E non sono d'accordo sul fatto che i nomi dovrebbero essere lunghi, il più delle volte dovrebbero essere brevi . Nomi descrittivi e lunghi possono rendere il codice più difficile da leggere rispetto a nomi leggermente meno descrittivi ma più brevi! (Le righe troppo lunghe sono generalmente difficili da leggere.)
Konrad Rudolph,

4
Non sono d'accordo. Se non riesco a vedere il codice in una volta, è difficile da leggere, non importa quanto descrittivi siano i nomi.
Jan Hudec,

4

80 caratteri per riga non è difficile da incontrare anche i nomi sono lunghi perché ci sono molti modi per suddividere una singola riga di codice lungo in più codici brevi, ad esempio, posso spezzare un'istruzione condizionale in C in più righe per adattarla a meno di 40 personaggi,

if ( a == b || c == d  || d == e
    || c == e || c == a || c == k
    || c == l)

puoi anche dividere una linea di chiamate di funzioni in più linee.

Pertanto, entrambe le regole di denominazione descrittiva e 80 righe di caratteri non hanno contraddizioni, possono coesistere per migliorare la leggibilità.


2
80 caratteri migliorano davvero la leggibilità? Quale schermo non può facilmente fare 120 in questi giorni?
Billy ONeal,

7
@BillyONeal è più facile scansionare oltre 80 di larghezza che oltre 120 di larghezza
maniaco del cricchetto

2
il giornale si divide
neo

1
La rottura di una condizione logica aumenta la leggibilità quando le interruzioni di linea corrispondono alla struttura della condizione, ma non necessariamente se corrispondono solo a un limite arbitrario.
mikołak,

1
@BillyONeal: la maggior parte degli schermi può fare 120, ma quasi nessuno può fare 240. O non confronti mai i diff?
Hubert Kario,

0

80 limite è qualcosa che avrebbe dovuto essere aumentato molto tempo fa. Si noti che questo limite viene utilizzato dall'età in cui la lunghezza di ogni identificatore era limitata a 8 caratteri e un solo carattere sullo schermo / stampante. Nessuna possibilità di modificare la dimensione del carattere.

Dio, ora abbiamo diverse tecnologie di stampa e serigrafia. Abbiamo linguaggi di programmazione molto diversi. Non c'è motivo di usare più di 80 caratteri. Aumentalo a 120 caratteri almeno.

Anche allora non dovrebbe essere un limite difficile. Vai un personaggio oltre la linea? Bene, non succede nulla!

Modificare:

Risposte dettagliate sulla storia del limite di 80 caratteri

Personaggi per riga su Wikipedia

Uno studio presso la Wichita State University ha scoperto che la CPL aveva solo piccoli effetti sulla leggibilità, compresi i fattori di velocità e comprensione. Quando sono state richieste le preferenze, tuttavia, il 60% degli intervistati ha indicato una preferenza per le linee più brevi (35 CPL) o più lunghe (95 CPL) utilizzate nello studio. Allo stesso tempo, il 100% degli intervistati ha selezionato una di queste quantità come la meno desiderabile.


4
No, il limite sicuramente non dovrebbe essere aumentato. Poiché non ha assolutamente nulla a che fare con la tecnologia dello schermo e della stampa, solo con il fatto che 80 caratteri per riga sono circa il massimo che gli occhi umani possono scansionare comodamente (66 caratteri sono considerati larghezza della linea ottimale, meno nella stampa multi-colonna). Il che significa che la maggior parte dei libri ha un po 'meno di 80 colonne per esempi di codice.
Jan Hudec,

3
@JanHudec Ha tutto a che fare con la tecnologia dello schermo / della stampa. Fare riferimento a programmers.stackexchange.com/questions/148677/… . La decisione di scegliere 80 personaggi è puramente storica, non basata su studi. Potresti aggiungere link agli studi per confermare la tua opinione?
Sulthan,

Un'altra domanda ha già questo link UX nei suoi commenti; ulteriori riferimenti lì. Mentre il numero 80 stesso è una coincidenza storica, è approssimativamente derivato dal numero di scioperi per riga sulle macchine da scrivere, che è stato approssimativamente derivato dalla larghezza comune della stampa a colonna singola e una media di 66 lettere era una tradizione consolidata per questo.
Jan Hudec,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.