La variabile deve essere denominata ID o ID? [chiuso]


126

Questo è un po 'pedante, ma ho visto alcune persone usare Idcome in:

private int userId;
public int getUserId();

e altri usano:

private int userID;
public int getUserID();

Uno di questi è un nome migliore dell'altro? Perché? Ho visto questo fatto in modo molto incoerente in grandi progetti. Se dovessi stabilire uno standard con cui la maggior parte delle persone avrebbe familiarità? Qual è lo standard convenzionale?


40
La coerenza è la cosa più importante che conta. Che si tratti di custodia per cammello, di sottolineatura o quant'altro. Sii coerente.

38
Guarda le API XML della tua lingua per vedere come lo fanno. Classi di nomi Java come SAXParsere DOMException, classi di nomi .NET come XmlDocument. Sulla base di ciò, direi "ID" in Java, "Id" in C #.
luiscubal,

1
Ma gli identificatori maiuscoli, per convenzione, vengono utilizzati in Java per i campi statici, quindi il nome "ID" per il campo base non è il migliore. E arriva la coerenza ...
Danubian Sailor

8
Vuoi nominare le variabili EGOe SuperEGO? Non la pensavo così. ;)
kojiro

4
Che cosa?! Consistenza? Dov'è la guerra della rabbia ?! Questo è tutto, mi dichiaro custode della sacra fiamma della sintassi del caso di cammello e con il presente decreto che farlo con tutte le maiuscole per gli acronimi è per nessuno. Inoltre, è corretto voler avere il rotolo di carta igienica dall'alto a meno che non ci siano gatti che si annoiano e fanno cose strane, nel qual caso hanno molto più difficoltà a svelare la carta igienica impostata per rotolare dal basso rendendo accettabile tale eresia per proprietari di gatti. Non so perché riesco a decretarlo. Bob, il custode della sacra fiamma della direzione della carta igienica, è impegnato, immagino.
Erik Reppen,

Risposte:


56

La regola più importante da seguire in questi casi è la coerenza: fai come fanno tutti gli altri.

Ad esempio, guarda le API XML della tua lingua per vedere come lo fanno.

Classi di nomi Java come SAXParser e DOMException , classi di nomi .NET come XmlDocument .

Sulla base di ciò, direi "ID" in Java, "Id" in C #.

Tuttavia, ho visto che Java EE 6 ha un'annotazione denominata @Id(vedi documentazione ), quindi sembra che Java consideri "Id" come una normale parola.


@Id indica un nome classe di annotazione, non un nome variabile. Esempio sbagliato
jwenting,

3
SAXParser potrebbe essere (e per fortuna non lo è) SimpleAPIforXMLParser (o anche SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser). Ogni lettera maiuscola inizia con la parola. Quindi anche in Java dovrebbe essere "Id"
user470365,

2
@jwenting Il problema è scoprire se "id" è considerato come una parola o come due parole. @Iddice che è una sola parola, quindi il nome della variabile sarebbe "id".
luiscubal,

No. SAX è un acronimo mentre Id no.
inalterato il

8
Hai ragione sull'uso Idin C # (e .NET in generale), ma per un motivo diverso. La regola è di scrivere in maiuscolo tutte le lettere di un acronimo di 2 lettere (ad es. IPAddress) E di scrivere in maiuscolo solo la prima lettera di acronimi più lunghi (come nell'esempio che XmlDocumenthai dato). Ma Ide Oksono le eccezioni a questa regola, espressamente menzionate. Per il brief completo, consultare la Capitalization Rules for Acronymssezione Capitalization Conventionsdell'articolo. Ma anche Microsoft infrange questa regola (es. DbConnectionVs. DBNull)
Allon Guralnek,

110

La coerenza è re; scegli l'uno o l'altro, ma fallo costantemente ovunque.

Detto questo, preferisco la prima variante, perché non viola CamelCase (farlo significa che hai due regole di stile da ricordare, non solo una).

Per questo motivo a volte vengono utilizzate due lettere maiuscole , ma un ID è in realtà solo una forma di identificazione.


18
Io per primo non mi piacerebbe se un programma per computer stesse cercando di accedere al mio ID.
Blrfl

1
userIdOfSender
Sean McSomething,

19
@SeanMcSomething: Ick. SenderUserId
Robert Harvey,

5
Mentre sono d'accordo con te che "Id" è il modo preferito in cui posso vedere dove arriva la confusione: nella conversazione di tutti i giorni in realtà lo diciamo come se fosse un acronimo, come in "posso vedere il tuo ID?"
500 - Errore interno del server

3
Guarda altri acronimi nel caso del cammello. C'è SoapProtocol, non SOAPProtocol. ID è l'abbreviazione di un documento di identità, quindi non vedo perché debba essere trattato in modo eccezionale nel caso di un cammello. Detto questo, preferirei userID utilizzato in modo coerente rispetto a userId e userID utilizzato in modo incoerente nel mio programma.
Neil

76

TL; DR: nel contesto delle librerie di classi .NET, Microsoft consiglia di utilizzare Id. Questo è leggermente contro-intuitivo, poiché è un raro esempio di abbreviazione consentita / consigliata (le abbreviazioni sono generalmente disapprovate).

Se stiamo parlando di convenzioni con le librerie di classi C # o .NET, Microsoft ha a disposizione alcune linee guida per i nomi abbastanza ben definite . Sono ben ponderati, con molte spiegazioni su una varietà di problemi - in realtà, ogni sviluppatore dovrebbe impiegare del tempo per leggere l'intera sezione delle Linee guida di progettazione .

Quando si tratta di acronimi , la regola empirica è: per gli acronimi a due lettere, si tende a mantenerli maiuscoli (dove è applicabile il caso Pascal), quindi ad esempio IOStreampotrebbe essere il nome di una classe. Per un acronimo più lungo, è minuscolo il resto della sigla, ad esempio XmlDocumento HtmlParser. Questa è in realtà una regola per lo più inequivocabile (non c'è confusione su dove finisce una parola e inizia la successiva, a meno che non si concatenino acronimi di due lettere), e ci si abitua molto rapidamente.

Quindi, è ID o ID? Bene, secondo Microsoft, potrebbe non essere quello che pensi:

Gli acronimi differiscono dalle abbreviazioni in quanto un'abbreviazione abbrevia una singola parola. Ad esempio, ID è un'abbreviazione per identificatore . In generale, i nomi delle librerie non devono usare abbreviazioni.

Le due abbreviazioni che possono essere utilizzate negli identificatori sono ID e OK. Negli identificatori con involucro Pascal dovrebbero apparire come Id e Ok. Se utilizzati come prima parola in un identificatore incastonato nel cammello, dovrebbero apparire rispettivamente come id e ok.

Aneddoticamente, in realtà non sono sicuro quando questa distinzione iniziò a comparire nelle linee guida, ma alcuni anni fa (intorno al 3.0 / 3.5) la tendenza generale dei nomi nelle librerie di classi passò da ID a Id.


1
Questa è la linea guida che di solito seguo. Poiché id è un'abbreviazione e non un acronimo, preferisco sempre usare "Id".
Toby,

Uso l'ID perché poi si rompe la convenzione e si distingue per essere unico, e mi piace l'ironia di ciò :)
RhysW

Penso che Microsoft abbia torto. L'ID è un inizialismo per il documento di identità, non è l'abbreviazione di identità. (Pedanticamente, gli acronimi sono pronunciabili.)
Tom Hawtin - affronta il

@ TomHawtin-tackline Fai un punto interessante, anche se sospetto che dipenda dal contesto. Qualcosa come una proprietà IDNumber su un oggetto Person avrebbe molto senso, ma per un VehicleId da leggere come "Documento di identità del veicolo" rispetto a "Identificatore del veicolo"? In contesti di programmazione, identificatore è una parola abbastanza comune per tutto ciò che identifica in modo univoco un'istanza, e direi che qui è più applicabile.
Daniel B,

@DanielB Nei linguaggi dei computer, anche SQL, "identificatore" di solito si riferisce a un nome, come il nome di una colonna. In genere viene abbreviato in "ident". Il veicolo è un esempio interessante perché ci sono schemi VIN stabiliti (numeri di identificazione del veicolo). In un tipico contesto di programmazione, il "documento" per un'entità è un numero (potrebbe anche essere una capacità imperdonabile).
Tom Hawtin - affronta il

15

Ho letto un'ottima spiegazione nel documento di alcune convenzioni di codifica. CamelCase dovrebbe sempre essere usato per acronimi e abbreviazioni, perché è più facile distinguere i confini delle parole (confronta XmlIdWritercon XMLIDWriter).


12
Ecco un'idea ancora migliore per distinguere i confini delle parole: confini delle parole reali! xml_id_writer.
Kaz,

4
@Kaz Bene, duh! Tuttavia, CamelCase è usato tradizionalmente in alcune lingue e sembrerebbe piuttosto fuori posto per usare i caratteri di sottolineatura in tali situazioni. La coerenza è re, come menzionato in precedenza.
Doren,

1
Usare CamelCase solo perché le librerie di base di alcune lingue lo usano non è coerenza, ma piuttosto conformità.
Kaz,

3
@Kaz: Hai battaglie più grandi da combattere nel tuo negozio rispetto alle convenzioni sul codice.
Robert Harvey,

2

Come possiamo vedere nella funzione predefinita di JavaScript getElementById (); L'ID è scritto nel caso Camel ...

Utilizzare 'id' se si utilizza con un carattere di sottolineatura. Esempio: user_id

Utilizzare 'Id' se si nomina un var senza alcun carattere di sottolineatura per differenziare le diverse parole. Esempio: userId

Se si tratta di una variabile a parola singola, dovrebbe essere in minuscolo completo, se più parole var, utilizzare la maiuscola Camel. Esempio: thisIsExample

Ma non consiglierei caldamente "ID" tutto in MAIUSCOLO perché generalmente utilizziamo tutti i tappi per definire COSTANTI.


Nel tuo terzo paragrafo, il tuo esempio non sembra corrispondere al tuo testo?
ruakh,

@ruakh thanx .. Rettificato ..
Sukrit Gupta,

0

In primo luogo, evitare l'abbreviazione.

In secondo luogo, se l'abbreviazione è molto nota, raccomando di usare la custodia per cammello.

Questo perché non è necessario considerare il significato di ciò. tratta come una parola normale

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.