2009-04-22 13 views
20

Jeff ha finito il his post parlando di questo, ma non ne ho capito l'idea.Perché le costanti di tutte le maiuscole sono considerate uno stile di codifica errato?

Quindi, perché pensi che questo sia uno stile di codifica errato?

EDIT:

io, come molti di voi, non penso che si tratta di uno stile di codifica male. Ma Jeff è un programmatore di gran lunga migliore di me, e il suo punto di vista ha acceso le luci sulla mia testa per ottenere una risposta se mi sbagliavo. Sono stato uno sviluppatore Delphi per alcuni anni e sto diventando uno sviluppatore C# ora, e in Delphi era una pratica comune.

+6

Probabilmente dovrebbe essere wiki della comunità. – chaos

+0

Per quanto riguarda Delphi, le maiuscole per le costanti sono generalmente vietate [secondo la guida di stile ufficiale] (http://edn.embarcadero.com/article/10280#3.3). – DBedrenko

risposta

56

Tutte le protezioni è la designazione C tradizionale di una costante macro del preprocessore. È molto utile avere questi in un namespace diverso da qualsiasi altra cosa, dal momento che il preprocessore si sostituirà ovunque trovi il nome, indipendentemente da cose come lo scope.

Una costante nel senso che Jeff stava usando è, semanticamente, una variabile che non può essere modificata. Rispetta tutti i principi di scoping e tutto, ed è semanticamente identico a una variabile non const con lo stesso valore.

Per mettere questo in un altro modo,

#define max_length 5 

è un problema, perché qualcuno potrebbe usare max_length come variabile in un contesto diverso, dove sarebbe normalmente essere al sicuro, mentre

const int max_length = 5; 

è semplicemente una dichiarazione variabile. Pertanto, c'è un vantaggio nell'usare

#define MAX_LENGTH 5 

perché la convenzione è che solo costanti preprocessore sono le maiuscole, in modo da non interferire con qualsiasi altro uso.

+6

+1 Inoltre, se si usano macro per i calcoli (ad esempio il bit canonico MAX() e MIN()), è utile sapere che gli argomenti a questi oggetti hanno semantica pre-processore non semantica del compilatore. – dmckee

+0

+1 Ottima risposta !!! – eKek0

4

TUTTI I CAPPUCCI È COME GRIDARE A QUALCUNO.

3

INOLTRE rende il codice più difficile da leggere

2

FLIP la domanda, perché utilizzare tutte CAPS?

3

Jeff ha alcune cose aggiuntive da dire su questo nei commenti:

Tuttavia sull'altro lato e la ragione per cui faccio uso ancora i tutti i tappi e sottolineare

Meno codice? Questa è una valida causa meritevole di discussione seria.

Ma se si chiama qualcosa "foo", "Foo", "_foo" o "FOO"? Meh.

Le convenzioni di denominazione sono altamente controverse e religiose . Gli sviluppatori dovrebbero scegliere qualcosa di loro come , qualcosa che si spera non sia troppo in disaccordo con le "convenzioni locali ", e basta andare con esso. A molta discussione e torcere le mani non è valsa la pena di nominare.

Detto questo, penso che TUTTI I TAPPI SONO VERAMENTE DIFFICILI DA LEGGERE!

Lo uso anche per le costanti, ma posso anche capire perché alcune persone non lo apprezzano. È un po 'come scrivere tutto in lettere minuscole in tedesco o in altre lingue.

2

Alcune persone considerano TUTTO IL MAIUSCOLO come "vecchia scuola". Si consideri la differenza tra:

const string ErrorMessage = "Some error message.";

e

const string ERROR_MESSAGE = "Some error message.";

Entrambi sono completamente utilizzabile, ma il tutto in maiuscolo versione è meno utilizzato dagli sviluppatori più recenti, come quelli che hanno cominciato fuori con. NETTO.

Lo considero uno stile di codifica errato se la tua squadra utilizza uno stile diverso. A parte questo, non mi interessa davvero. Almeno quando vedo TUTTI I CAPITOLI in qualche codice condiviso, posso immaginare che sia una costante.

+1

-1: non "old school", ma lingua/piattaforma dipendente. In .NET è scoraggiante, ma in altri casi è incoraggiato. – Richard

+2

Immagino che tu non abbia letto il post di Jeff, in cui lo ha specificamente chiamato "vecchia scuola". –

0

Uso ALL_CAPS per macro e simboli del preprocessore. Quindi le mie costanti C-C99 sono ALL_CAPS, ma non in qualsiasi altra lingua che conosco.

7

Non penso che sia un cattivo stile di programmazione. Forse vecchio stile, ma non male. Fa sì che le costanti si distinguano da altre variabili.

2

Non penso che sia sia sbagliato. Per lo più, è una scelta personale. Per la codifica personale, fai ciò che vuoi. Per la codifica professionale, seguire la politica aziendale.

3

Bene, c'è il vecchio problema di leggibilità. Il test con involucro normale è solo più facile da leggere.

Tuttavia, ci sono delle eccezioni. I linguaggi come SQL sono in genere tutti maiuscoli (anche se non distinguono tra maiuscole e minuscole).

Inoltre, ci sono altri usi, come distinguere tra "costanti" e variabili regolari, che vedrete in un sacco di linguaggi come PHP, Python, ecc, anche se Jeff per qualche motivo non piace ed è apparentemente contrario alle linee guida in stile codice C#.

Quindi, in generale, non penso che sia sbagliato da nessuna parte, ma penso che si dovrebbe sempre cercare di seguire le migliori pratiche generali. Quando sei a Roma, fai come i romani - quando si scrive codice Python, seguire PEP 8 :)

2

Proprio come scrivere tutto in grassetto non è una buona idea

+0

Hai scritto codice Java/.Net in Word? – romaintaz

+0

Un mio collega ha impostato il font del suo editor di codice per essere audace ... è stato sicuramente interessante poter leggere il suo codice da tutta la stanza. –

5

L'unico motivo valido per me è la coerenza di stile. Per i linguaggi non.NET come Java/C++, le costanti di tipo "tutto maiuscolo" sono certamente accettabili.

per C#, lo standard è quello di utilizzare PascalCase, come indicato qui: C# naming convention for constants?

+3

Sì, assimilare lo stile della piattaforma/lingua è la strada da percorrere. +1 –

30

Troverete che un sacco di dichiarazioni di Jeff sono controversi prima, con una precisione di essere una preoccupazione secondaria. Il suo blog non sarebbe così popolare se non fosse occasionalmente infiammatorio. (Si consideri l'ultima riga di Death to the Space Infidels, "Detto questo, solo un deficiente userebbe le schede per formattare il loro codice.") È onestamente soggettivo. Non prendere tutto ciò che dice come vero e buono - non è pensato per essere. Se non sei d'accordo, vai a calci nel sedere nei commenti, e vedi se lui scrive di nuovo. :)

Penso che ALL_CAPS_CONSTANTS siano perfetti: sono immediatamente riconoscibili e familiari. Parte delle linee guida di stile del mio posto di lavoro (e non ne abbiamo così tante) è scrivere tutte le costanti statiche in maiuscolo. Non sudare; usa semplicemente quello che il resto della tua squadra usa. Decidere su StudlyCaps vs camelCase vs SCREAMING_CAPS vale forse 90 secondi di discussione.

9

Francamente, non penso che sia uno stile di codifica errato. Infatti, anche lo stile del codice Java ufficiale rende costanti tutte le maiuscole (http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html), così come altre convenzioni linguistiche.

In teoria, è più difficile da leggere - noi esseri umani piace usare la variabile in altezza delle lettere per aumentare la velocità di lettura (possiamo dedurre molte informazioni da soli forma di parola ruvida e le prime/ultime lettere). Tuttavia, non ho un problema con le frasi brevi, tutte maiuscole. Difficilmente "urla" (il compilatore non si preoccupa esattamente di quanto sei scortese) e mostra chiaramente che i nomi sono potenzialmente mutabili e quelli che non lo sono.

+0

_questo tuo compilatore non si preoccupa esattamente di quanto sei maleducato_ - a meno che tu non stia scrivendo in [INTERCAL] (https://en.wikipedia.org/wiki/INTERCAL). – Ruslan

18

L'urlo va bene. Nel caso della costante si dice al lettore

NON pensare di cambiare in seguito nella CODICE

ma capisco se i programmatori morbide si offendono.

2

Ho rimappato il mio capslock in un tasto ctrl (corri emacs!). Quindi penso che sia un cattivo stile quando devo digitare nomi di 30 caratteri mentre tengo premuto shift

+3

Per qualche ragione, praticamente non uso mai il tasto maiuscole, almeno intenzionalmente. Scrivo rapidamente, ma non utilizzo la metodologia "ufficiale" di dattilografia.Semplicemente premo i tasti con qualsiasi dito si senta appropriato al momento, e non ho problemi a digitare uno qualsiasi dei caratteri della mano sinistra mentre tengo premuto il tasto Maiusc. – supercat

0

Le costanti e le COSTANTI possono essere diverse. Usa le maiuscole solo quando si ha a che fare con il preprocessore, detto per esempio in C++ si raccomanda di evitarlo e usare la variabile const o constexpr che sarà chiamata proprio come qualsiasi altra variabile (magari con qualche prefisso o qualcosa per chiarire che è una costante ma ...).

Problemi correlati