Come scrivere la custodia del cammello per parole come "numero di telefono", "moto", "lunghezza d'onda", ecc


75

Sto riscontrando un problema nel comprendere come applicare la sintassi di camelCase ad alcuni dei miei nomi di variabili.

Ad esempio, come dovrei scrivere correttamente una parola come "numero di telefono" nel caso del cammello? È phoneNumbero phonenumber? Allo stesso modo con "nome utente", è usernameo userName?

Penso che non guardare a destra con il caso di cammello come motorCycle, passWord, sunDay, setUpo waveLengthdal momento che questi sono solo una parola ciascuno. Penso che potrebbe essere il motivo per cui viene chiamato, hashMapma anche hashtablenel caso del cammello senza la capitale nell'ultimo caso perché hashtable è una parola mentre hash map è due parole.

Ma se la motocicletta ha un colore, lo sarebbe motorcycleColordal momento che una parola è concatenata? E 'corretto o dovrebbe essere phoneNUmber, waveLength, sunBlocke anche sunDayper la Domenica della settimana?

Perché per esempio viene chiamato il metodo getISOCountriesmentre dice HttpHeadersad esempio non è chiaro cosa diventa minuscolo se abbiamo un metodo come String camelCaseString = dog.toCamelCase()o interface CamelCase.

Correlati: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces


7
Per i casi in cui è davvero difficile dire se una frase di due parole è una parola composta, scegli una maiuscola e mantienila. Come con la maggior parte delle convenzioni di codifica, la coerenza all'interno di un singolo progetto è la cosa più importante.
Kevin,

2
Ottima domanda, mi sono sempre chiesto come scrivere "nomefile" (e il "nomefile" sbagliato). Penso che questa parola sia scritta in modo diverso da programmatore a programmatore ...
Ray

3
@PacMani Potresti apprezzare la discussione qui !
Jason C,

4
@ 909Niklas Lascerei cadere il "nome" il più possibile. Usa "street". Se è una stringa, è un nome a meno che non sia dannoso o confuso. usernameè quello che è, è un segnale di chiamata, non il "nome dell'utente", quindi è più simile alla motocicletta di firstName o lastName (che dovrebbe essere camelcased)
Peter Turner,

2
@PeterTurner Alcuni programmatori direbbero che streetdovrebbe essere una classe e nameuno dei suoi membri attributi / dati.
JAB

Risposte:


173

Dovresti scrivere in maiuscolo la lettera dopo dove "normalmente" dovrebbe esserci uno spazio (quando scriveresti una lettera invece del codice sorgente). Il tuo primo presupposto è corretto:

  • È una "motocicletta", non un "ciclo motore", quindi la tua variabile dovrebbe essere nominata motorcycle, non motorCycle.
  • È una "mappa hash", quindi vai avanti hashMap, no hashmap.
  • "Domenica" è una parola -> sunday, no sunDay.
  • Mentre "giorno della settimana" sarebbe dayOfWeek, no dayofweek.

4
Per quello che vale, io e il mio team generalmente usiamo hashmapuna sola parola, anche se ironicamente non lo facciamo tree map. scrollata di spalle
corsiKa

1
Bene, la moto è un po 'un caso limite (era, in effetti, originariamente un motociclo, sebbene ora sia qualcosa di diverso); honeyBee(e non honeybee, in realtà, non "ape mellifica" ma "ape da miele"), e butterfly.
Orome,

3
Il setUpcaso senza indirizzo è comunque un caso limite, è una sola parola, ma JUnitstoricamente ha il nome di inizializzazione del dispositivo setUp.
TC1,

23
@ TC1 In realtà, "setup" è un sostantivo , mai un verbo. "Imposta" la forma corretta dell'azione. JUnitha ragione, il resto di noi è il caso limite. :)
Jason C,

3
@JasonC Grazie, finalmente ha senso il motivo per cui la controparte è tearDown: D
TC1

44

Parte 1
Penso che ciò che ti inganna sia che alcuni dei tuoi esempi sono parole composte , mentre altri no.

  • numero di telefono // non una parola composta
  • moto // parola composta
  • lunghezza d'onda // parola composta
  • crema solare // parola composta
  • Domenica // parola composta *
  • colore della motocicletta // parola composta utilizzata con una parola non composta.

Le parole composte non seguono la notazione del caso cammello per la seconda parola nella parola composta.

Quindi è motorcyclee non motorCycle.

Ma "numero di telefono" non è una parola composta e sarebbe seguire caso la notazione cammello. vale a dire phoneNumber.

E che porta a: motorcycleColor.

Se non riesco a ricordare se una parola è veramente una parola composta o no, la cerco nel dizionario per essere certa.

Parte 2
Due dei tuoi esempi sono un po 'più complicati.

  • mappa hash
  • tabella hash

Sono complicati perché alcuni li scriveranno come "hashmap" e "hashtable". Secondo il dizionario che ho appena controllato, sono parole separate e non composte. Quindi la custodia del cammello corretta sarebbe hashMape hashTable. Non tutte le squadre seguono questa convenzione, quindi devi chiedere ai tuoi compagni cosa preferiscono e poi attenersi a quello. La coerenza è più importante in questo caso di quanto sia corretto un dizionario.

* Alcuni sosterranno che domenica è una parola composta poiché altri giorni della settimana non lo sono, ma ai fini di questa domanda eviterò quel problema. È più facile da trattare come una parola composta e quindi nessun caso di cammello.


6
Anche gli altri giorni della settimana erano tutti composti: "lunedì" <- giorno della luna, martedì <- giorno di Tiw, mercoledì <- giorno di Woden, giovedì <- giorno di Thor, venerdì <- giorno di Frigg, sabato <- giorno di Saturno
kevin clina il

6
@kevincline: quelle forme dei nomi dei giorni sono probabilmente considerate arcaiche ora, quindi non contano davvero per scopi pratici. ... A meno che tu non scriva effettivamente un codice che assomiglia a if (currentDay == thorsDay) {...Hmm ... peccato che le librerie delle date non abbiano questa opzione di formattazione quando vuoi ottenere il nome completo del giorno della settimana.
FrustratedWithFormsDesigner,

15
@FrustratedWithFormsDesigner: il punto era che nell'uso moderno, domenica è una parola composta nella stessa misura in cui lunedì è: per niente. È solo un caso che il "Sole" in "Domenica" possa stare da solo, mentre "Il giorno della luna" è stato abbreviato in "Lunedì"
Kevin Cline,

6
Meglio ancora, usa nomi migliori per le tue variabili di hashMap o hashTable. È una strada scivolosa che porta a questa meravigliosa linea di codice:HashMap hashMap = new HashMap();
Eric Andres,

8

Come altri hanno sottolineato, la custodia del cammello viene utilizzata quando si uniscono le parole. Non usare la custodia per cammelli in una sola parola inglese. Il problema sorge nel determinare quali composti sono parole singole. Lasciati a se stessi, i programmatori verranno a prendere decisioni diverse a seconda della loro conoscenza dell'inglese. Ciò porta a incoerenze nella capitalizzazione, che sono quasi fastidiose quanto gli errori di ortografia.

Per evitare ciò, i programmatori dovrebbero usare un riferimento standard (es. Dizionario.com ) quando non sono sicuri dell'ortografia o delle maiuscole. Tuttavia, se la coerenza nella denominazione è importante per il tuo progetto, non vi è alcun sostituto per la revisione del codice.

Scegliere un singolo riferimento per il tuo progetto risolverà la maggior parte degli argomenti sulla capitalizzazione e l'ortografia. Ci sono alcuni composti come Hashtable che non sono nei dizionari, ma sono scritti in maiuscolo come singole parole nelle API Java e C #. Ti consigliamo di prendere una decisione a livello di progetto su quelli. In Java, è "HashMap" ma "Hashtable". "Hashtable" dell'IMO è chiaramente errato; non appare mai come una singola parola se non come nome in un'API.


4

Il modo più semplice per fare il caso del cammello è sulla delineazione delle parole.

Esempi dalla tua domanda:

  • numero di telefono: numero di telefono
  • moto: moto
  • domenica: domenica
  • lunghezza d'onda: lunghezza d'onda

Se non lo divideresti in due parole, non dovresti usare anche la custodia per cammello. Altrimenti lo stai usando su sillabe e quanto sembra sciocco

  • auxIlIArY (Questa è una parola di 5 sillabe; per non parlare dell'io che sembra una merda su caratteri non monospaziati / sans-serif).

5
il numero di telefono non è una parola propria, inseriscilo in google come una sola parola, cercherà felicemente tutto ciò che ha "Numero di telefono" non numero di telefono. E l'installazione non è di due parole, né la password.
Jeff Langemeier,

6
@JeffLangemeier Un piccolo cavillo: "setup" è un sostantivo, mentre "setup" è un verbo. Quindi se si dispone di un oggetto che rappresenta il modo in cui è impostato, verrebbe chiamato setup, mentre se si avesse una funzione per impostare qualcosa, verrebbe chiamato setUp.
bdesham,

2
@bdesham me ne rendo conto, ma starei solo alla larga da setUp, dato che verrebbe inizializzato un verbo migliore, meno ambiguo, in realtà mi sono completamente dimenticato della versione del verbo di setup.
Jeff Langemeier,

1
Penserei che quello che inizia con "wa" potrebbe essere wavelengtho in waveLengthbase al fatto che il valore in questione sia relativo alla velocità di propagazione divisa per frequenza o se si riferisca alla "lunghezza" (non necessariamente alla distanza) di un tipo di onda . Ad esempio, la variabile di una libreria di sintesi audio per il numero di campioni associati a un'onda non sarebbe wavelengthma waveLength.
supercat,

2
@kevincline: Nei motori di sintesi audio, è comune avere tabelle wave che contengono uno o più campioni interi di un'onda. Quando la riproduzione raggiunge la fine della tabella, ritorna all'inizio (per motori semplici) o in qualche altro punto dell'onda. A dire il WaveLengthvero, sarebbe di per sé un po 'vago in tutti gli scenari tranne quelli più semplicistici [si riferisce alla dimensione del buffer o alla lunghezza della sezione di loop] ma le parole potrebbero apparire perfettamente in un nome più lungo.
supercat,

4

È qui che una complicazione con l'inglese semplice si intromette nel modo in cui uno in seguito abusa dell'inglese per adattarsi alle regole dello spazio bianco dei token in contesti di programmazione.

Delle parole di esempio fornite, quasi tutte sono composti. La domenica non lo è, poiché mentre è nata come un composto, lo ha fatto così tanto tempo fa che a malapena può essere considerata una ora, soprattutto perché il suo impegno per il sole è più una curiosità storica che una parte forte del religioso e culturale prospettiva delle persone di lingua inglese.

E in inglese, i tre modi principali per scrivere un composto sono aperti (con uno spazio tra le due parole), sillabati e chiusi (senza spazio o trattino tra i due). E mentre ci sono alcune regole sulla sillabazione di composti aperti in determinate situazioni, non c'è davvero molto in termini di regole ferme per sapere quale forma viene utilizzata per un determinato composto oltre a vedere cosa fanno le altre persone, e ci sono ancora momenti in cui 'll trovare due o anche tutte e tre le forme ( eggbeater , eggbeater e frullino per le uova , per esempio).

Qui, il numero di telefono è quasi sempre scritto aperto, quindi dovrebbe essere trattato come due parole.

E quando si intercetta per formare un token, lo spazio o il trattino viene rimosso e la seconda e successiva parola scritta nel caso del titolo, quindi phoneNumbero PhoneNumbercome appropriato per la propria convenzione.

La cosa che phoneNumbersembra strana è probabilmente che è più comunemente dato come phonenella maggior parte dei contesti, o come numberquando il contesto riguarda una connessione telefonica.


2

Assicurare la coerenza all'interno del file di codice.

Promuovere la coerenza all'interno del progetto di codice.

Preferisce la coerenza all'interno della libreria di codici.

La combinazione di parole per rappresentare i concetti cambia man mano che acquisiamo maggiore familiarità con una data agglutinazione .

Per esempio...

  • 'telefono' è stato abbreviato in solo 'telefono'
  • 'telefono' è stato abbreviato in solo 'telefono'
  • il "numero di telefono" veniva talvolta contratto in "numero di telefono"
  • "numero di telefono" divenne presto "numero di telefono"
  • Il "numero di telefono" è spesso ulteriormente abbreviato in "telefono"
  • 'cellulare', o semplicemente 'cellulare' sono oggi in uso comune
  • 'homephone' e 'workphone' potrebbero presto diventare comuni

Nota che il controllo ortografico StackExchange non riesce a decidersi. Il "numero di telefono" alla fine della frase precedente andava bene, ma contrassegna quello all'inizio della frase (maiuscolo o meno).

Per quanto la maggior parte di tutti desideri che ci sia "un modo giusto" per fare le cose, quando si tratta di linguaggio, ciò non potrà mai essere. Al termine del progetto, l'utilizzo sarà probabilmente cambiato. Certamente la tua comprensione sarà cambiata e la funzionalità del metodo / et.al. probabilmente sarà anche cambiato. (Nel qual caso, probabilmente dovresti cambiare il nome in modo appropriato.)


-1

Dal punto di vista strettamente tecnico (USA), dove xxx-yyy-zzzz è quello che normalmente si considera un "numero di telefono", la parte xxx viene correttamente indicata come prefisso, la parte yyy viene correttamente indicata come scambiare e l'zzzz viene correttamente indicato come il numero.

Dal momento che non solo "phonenumber" non è una parola composta (ancora), ma se lo diventa, farà erroneamente riferimento a qualcosa al di fuori delle intenzioni del suo creatore, direi che la sintassi di camelCase richiederebbe phoneNumber per qualsiasi variabile che lo fa riferimento, ma se farai qualsiasi cosa con l'attuale sistema telefonico, userei phoneExchangeNumber per le cifre a sette cifre e phoneACExchangeNumber per le versioni a dieci cifre.


1
questo non sembra offrire nulla di sostanziale rispetto ai punti formulati e spiegati in questa risposta precedente che era stata pubblicata più di 3 anni prima
moscerino del
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.