Quali parti dello standard di codifica contribuiscono al codice di qualità? [duplicare]

30

In risposta a Questa domanda , I chiedi: quali sono le parti migliori del tuo standard di codifica?

Quali sono le migliori pratiche che aiutano con la qualità del codice, l'affidabilità, la manutenibilità, la leggibilità, ecc.

Si prega di includere la lingua, l'elemento dallo standard e il motivo per cui migliora il codice.

    
posta AShelly 12.04.2017 - 09:31
fonte

16 risposte

23

All Languages: Write readable code instead of comments

  • Un commento seguito da un blocco di codice può essere sostituito da un metodo che dichiara l'intento altrettanto bene del commento e rende il codice più modulare e riutilizzabile come bene.
  • Rende il refactoring più frequente.
  • Ci aiuta a scrivere in modo semplice, leggibile cleancode . Il codice leggibile è una gioia con cui lavorare.
  • Tende a rendere i metodi brevi e dolci.
  • Evita che i commenti non siano sincronizzati con il codice
  • Ti sfida a riscrivere codice commentato che è difficile da capire.

Confronta questo:

public void update() {
  // Fetch the data from somewhere
  lots of lines of;
     code;
     for;
       fetching;
     data;
  from somewhere;
  // Sort the data
  more lines of;
      code;
         which sorts;
         stuff;
      around;
  a bit and then;
  // Update the database
  lines of code;
      which uses;
         some lib;
         to update;
            using iteration;
            and logic; 
      the database;
  done;
}

Con questa versione in cui i commenti vengono sostituiti con le chiamate di funzione:

public void update() {
    data = fetchData();
    sorted = sortResults(data);
    updateDatabase(sorted);
}
    
risposta data 04.12.2010 - 23:11
fonte
12

Solo una classe pubblica deve essere inserita in ogni file, non di più.

    
risposta data 11.09.2010 - 01:03
fonte
9

Qualsiasi lingua:

Un uso adeguato e coerente degli spazi bianchi, sia verticale che orizzontale, ampiamente migliora la capacità del codice di essere rapidamente scremato e di leggere a un ritmo normale. Non ho intenzione di discutere sulle schede rispetto agli spazi, purché il loro utilizzo sia coerente, ma sono assolutamente necessari indentazione e uso giudizioso di linee vuote e spazi attorno agli operatori.

Correlati: mantenere le lunghezze delle righe a un limite ragionevole come 80 colonne ha vantaggi dimostrabili: nessun involucro strano su console, nessuna necessità di scorrere e la possibilità di visualizzare più file affiancati su un ampio monitor, per non parlare di quello tende a incoraggiare il refactoring del codice profondamente annidato e delle espressioni run-on.

    
risposta data 30.10.2010 - 19:59
fonte
7

C #: stili di denominazione diversi per diversi tipi di nomi.

Ad esempio:

public class ClassNamesArePascalCase{
    public int FieldsArePascalCase;
    private int _privateFieldsAreUnderscoredCamelCase
    public const int CONSTANTS_ARE_CAPITAL = 3;

    public void MethodNamesArePascalCase( string parametersAreCamel ){
        int localVariablesAreCamel;
    }
}

Non importa tanto quali standard usi per quali tipi di nomi, purché coerenti tra loro (ad esempio, tutte le costanti sono maiuscole), coerenti all'interno del progetto e diverse l'una dall'altra. Il vantaggio qui è che posso dire a colpo d'occhio che _someVar è un campo privato senza doverlo cercare.

    
risposta data 10.09.2010 - 22:00
fonte
6

C : le "funzioni" macro del preprocessore dovrebbero essere tutte maiuscole

Esempio: #define CUBE(x) ((x)*(x)*(x))

Motivo: quando si esegue la scansione del codice, i macro si distinguono dalle normali funzioni e avvisano che potrebbero verificarsi effetti indesiderati che una normale chiamata di funzione non avrebbe mai avuto, come la modifica del valore dell'argomento "input" o la valutazione di 3 volte.

    
risposta data 10.09.2010 - 21:39
fonte
5

In Java.

  • Richiama automaticamente il formattatore del codice sorgente Eclipse ogni volta che viene salvato un file.

Questo significa che le modifiche al codice sorgente sono registrate al primo commit in seguito, invece che in un secondo momento quando viene eseguito un reformat. Ciò è positivo quando si effettuano indagini "quando questo è cambiato".

    
risposta data 01.11.2010 - 07:45
fonte
5

Non usare mai la notazione ungherese. In tipi staticamente i linguaggi non sono necessari e nelle lingue digitate dinamicamente è quasi sempre dannoso. Inoltre, Notazione ungherese è l'arma nucleare tattica delle tecniche di offuscamento del codice sorgente .

    
risposta data 13.11.2010 - 02:11
fonte
3

C #: utilizza il metodo di estrazione anziché i commenti

Se pensavamo di dover aggiungere un commento a un blocco di codice per spiegare che cosa sta facendo, dovremmo invece estrarre quel codice in un nuovo metodo con un nome descrittivo.

Questo rende il codice più leggibile e modulare e riduce il numero di commenti (non aggiornati) che galleggiano.

    
risposta data 10.09.2010 - 21:56
fonte
3

Formattazione - in particolare Rientro! Sto usando Delphi e la prima cosa da fare quando ottengo il codice non formattato per il mio utilizzo lo riformattare. In questi casi, il formattatore integrato in Delphi funge da una delle funzioni più utilizzate.

    
risposta data 07.10.2010 - 16:44
fonte
3

COERENZA

Non sono infastidito da alcuna particolare convenzione di denominazione o codifica (anche se, ovviamente, ho delle preferenze) a patto che qualsiasi codebase a cui sono applicate usi queste convenzioni in modo coerente.

Ho letto Pulisci codice ultimamente e trovo che mi ha aiutato un po '( anche se non sono d'accordo / l'uso di tutti).

    
risposta data 13.11.2010 - 02:18
fonte
1

Per l'ereditarietà di C ++. Sottolineando ciò,

  • Eredità multipla : solo molto raramente è più utile l'ereditarietà dell'implementazione.

Per altre cose.

  • Macro preprocessore : sii molto prudente con i macro. Preferisci le funzioni inline, le enumerazioni e le variabili const alle macro.
  • Puntatori intelligenti : se hai effettivamente bisogno della semantica del puntatore, scoped_ptr è ottimo. Dovresti usare solo std :: tr1 :: shared_ptr in condizioni molto specifiche, come quando gli oggetti devono essere trattenuti da contenitori STL. Non dovresti mai usare auto_ptr.
risposta data 07.10.2010 - 16:31
fonte
1

C # e Java:

  • Assicurarsi che la registrazione delle sezioni critiche sia definita correttamente (log4 *).
  • Mantiene piccoli metodi e classi (Single Responsibility).
  • TDD o scrivere unit test per importante sezioni di business logic (jUnit o NUnit).
risposta data 30.10.2010 - 17:29
fonte
1

SQL

Abbiamo usato una convenzione di denominazione per i nostri elementi del database.

  • tblTableNames
  • viewViewName
  • spAdminProcedureName
  • spProcedureName

Spesso dovremmo creare un widget per un cliente e 3 mesi dopo lo rivenderemo a un altro cliente. Alla fine sono sorti conflitti di denominazione e abbiamo dovuto ricodificare un widget.

Ad esempio:
Widget di comunicato stampa

  • tblContent
  • tblCategories
  • tblImages

Widget Galleria foto

  • tblPhotos
  • tblCategories

Se il Cliente-A aveva già il widget del comunicato stampa e ora desiderava il widget Galleria fotografica, si è verificato un conflitto di denominazione con tblCategories. Non potevamo semplicemente creare script sugli elementi della Galleria fotografica ed eseguirli contro il database di Company-A. Argh!

Quindi abbiamo iniziato ad aggiungere un "widget" riferimenti ai nostri elementi SQL:

  • tblPG_Photos
  • tblPG_Categories
  • tblPR_Content
  • tblPR_Categories
  • tblPR_Images
  • spPG_Proc1
  • spPG_Proc2
  • spPG_Proc3
  • spPR_Proc1
  • spPR_Proc2
  • spPR_Proc3

Ciò ha mantenuto le cose ben impacchettate e ci ha aiutato a essere più redditizi a lungo termine.

    
risposta data 13.11.2010 - 00:52
fonte
0

Il metodo di denominazione univoco, non ha importanza sulla lingua. Ad esempio .. G = Globale, L = Locale, P = Parametro. Ora, quando hai una variabile come G_strFoo, so che la sua definizione può trovarsi nel mio file globale. Aiuta a stare al passo con tutte le variabili nei miei programmi.

    
risposta data 07.10.2010 - 16:47
fonte
0

In Python, usa solo la libreria standard, e se non puoi evitare di usare un'altra libreria, spiega perché da qualche parte. Un giorno potrebbe essere necessario sostituire la lib e sarebbe bello sapere da dove cominciare.

Inoltre, tienilo molto molto semplice.

    
risposta data 01.11.2010 - 07:56
fonte
0

Ho scritto di questo nel mio blog l'altro giorno.

Convenzioni e standard di codifica C #

link

Penso che per quanto riguarda le convenzioni di codifica, la cosa principale che contribuisce all'affidabilità, alla manutenibilità e alla leggibilità del codice sono le convenzioni di denominazione. Il resto del materiale è piuttosto standard.

Non esiste un modo "giusto" o "sbagliato" con le convenzioni di denominazione. La chiave è la coerenza. Ad esempio, utilizzo sempre camelCasing per parametri e variabili locali, utilizzo camelCasing con prefisso con un underscore per i membri del campo privato / protetto e utilizzo PascalCasing per nomi di classi, proprietà, eventi, funzioni, ecc.

In generale, mi rifaccio anche alla notazione ungherese per motivi di leggibilità, ma penso che in alcuni scenari sia utile (di solito uso la notazione ungherese per i tipi di GUI).

Un effetto collaterale del rispetto delle convenzioni è che è facile tenere traccia del tipo di identificatore che si sta guardando durante la lettura del codice. Ad esempio, posso sempre contare sul fatto che le proprietà utilizzano PascalCasing mentre le variabili locali no, il che mi impedisce di dover eseguire la scansione e trovare la definizione di un identificatore durante la lettura del codice.

Il fatto che il tuo team segua le stesse convenzioni e standard di codifica può aiutarti a rendere il tuo software più leggibile e più uniforme mantenendo le cose coerenti e pulite. Ciò facilita la manutenzione consentendo ai membri del tuo team di leggere e comprendere il codice scritto dai collaboratori più rapidamente senza dover eseguire mentalmente un filtro in background per interpretare le differenze di layout e stile, ecc. Inoltre promuove le best practice e può contribuire a mantenendo le tue API coerenti pure.

Se il tuo codice è pulito, coerente e di facile lettura, diventa più gestibile e meno soggetto a errori.

    
risposta data 14.06.2011 - 19:24
fonte

Leggi altre domande sui tag