Denominazione descrittiva contro righe di 80 caratteri [chiusa]

18

Spesso ascolto queste due preziose pratiche di programmazione: (1) le righe di codice dovrebbero essere 80 caratteri o meno e (2) usare nomi descrittivi per variabili, metodi, classi, ecc. Capisco il ragionamento per entrambe le parole di consiglio, tuttavia, sembrano essere spesso dei reciproci scambi. Se tengo il mio codice sotto 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 che superano gli 80 caratteri.

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

    
posta mjgpy3 18.01.2013 - 05:50
fonte

5 risposte

33

Mantieni invariati i tuoi indentini, i tuoi nomi sono descrittivi e non aver paura di spezzare una linea.

Tieni pochi i tuoi indizi.

Spesso quando mi trovo in una lotta tra i rientri e la denominazione descrittiva, faccio un passo indietro e guardo il mio livello di indention. Se stai indentando oltre 3 o 4 livelli (2 livelli sono automatici e inevitabili in molti casi. Leggi: definizione del metodo di classe), potresti voler ristrutturare il tuo codice, estraendo funzionalità in una funzione o in un metodo.

I tuoi nomi descrittivi

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

Non aver paura di rompere una linea

Succede la merda. Se superi 80 caratteri e non vedi comunque di recuperare spazio nella linea, interromperlo. La maggior parte delle lingue non si preoccupa delle interruzioni di riga, quindi suddividere la linea in più. Non scegliere solo una posizione casuale. Mantenere le cose raggruppate in modo logico e indentare un altro livello quando si interrompe la linea.

    
risposta data 18.01.2013 - 06:11
fonte
18

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

    
risposta data 18.01.2013 - 12:17
fonte
16

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

    
risposta data 18.01.2013 - 06:02
fonte
4

80 caratteri per riga non sono difficili da soddisfare, anche i nomi sono lunghi perché ci sono molti modi per spezzare una singola riga di codice lungo in più codici funzione, ad esempio, posso rompere un'istruzione di condizione in C su più righe per adattarla meno di 40 caratteri,

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ù righe.

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

    
risposta data 18.01.2013 - 06:09
fonte
0

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

Dio, abbiamo una diversa tecnologia di schermo e stampa ora. Abbiamo linguaggi di programmazione molto diversi. Non c'è più motivo di usare più di 80 caratteri. Aumentalo a 120 caratteri.

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

Modifica:

risposte dettagliate sulla storia di 80 -char limit

Caratteri per linea su Wikipedia

A study at Wichita State University found that CPL had only small effects on readability, including factors of speed and comprehension. When asked for preferences, however, 60% of respondents indicated a preference for either the shortest (35 CPL) or longest (95 CPL) lines used in the study. At the same time, 100% of respondents selected either one of these quantities as being the least desirable.

    
risposta data 18.01.2013 - 14:03
fonte

Leggi altre domande sui tag