Cómo escribir un caso de camello para palabras como "número de teléfono", "motocicleta", "longitud de onda", etc.

75

Tengo un problema para entender cómo aplicar la sintaxis de camelCase a algunos de mis nombres de variables.

Por ejemplo, ¿cómo debo escribir correctamente una palabra como "número de teléfono" en caso de camello? Es phoneNumbero phonenumber? De manera similar con "nombre de usuario", ¿es usernameo userName?

Creo que no se ve bien con el caso de camellos como motorCycle, passWord, sunDay, setUpo waveLength, ya que estos son sólo una palabra cada uno. Creo que podría ser por eso que se llama, hashMappero también hashtableen el caso de camello sin la capital en el último caso porque la tabla hash es una palabra, mientras que el mapa hash es dos palabras.

Pero si la motocicleta tiene un color, ¿sería motorcycleColorporque una palabra está concatenada? ¿Es correcto o debe ser phoneNUmber, waveLength, sunBlocke incluso sunDaypara el domingo de la semana?

Por qué, por ejemplo, se llama al método getISOCountriesmientras dice, HttpHeaderspor ejemplo, no está claro qué se convierte en minúsculas si tenemos un método como String camelCaseString = dog.toCamelCase()o interface CamelCase.

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

Niklas Rosencrantz
fuente
77
Para los casos en los que es realmente difícil saber si una frase de dos palabras es una palabra compuesta, elija una mayúscula y quédese con ella. Al igual que con la mayoría de las convenciones de codificación, lo más importante es ser coherente en un solo proyecto.
Kevin
2
Gran pregunta, siempre me pregunté cómo escribir "fileName" (y el "nombre de archivo" incorrecto). Creo que esta palabra se escribe de manera diferente de programador a programador ...
Ray
3
@PacMani ¡Puede disfrutar la discusión aquí !
Jason C
44
@ 909Niklas soltaría "nombre" por completo tanto como sea posible. Simplemente use "street". Si es una cadena, es un nombre a menos que sea perjudicial o confuso. usernamees lo que es, es un distintivo de llamada, no el "nombre de usuario", por lo que se parece más a la motocicleta que al nombre o apellido (que debe estar en camello)
Peter Turner
2
@PeterTurner Algunos programadores dirían que streetdebería ser una clase y nameuno de sus atributos / miembros de datos.
JAB

Respuestas:

173

Debe poner en mayúscula la letra después de donde "normalmente" habría un espacio (cuando escribiría una letra en lugar del código fuente). Su primera suposición es correcta:

  • Es una "motocicleta", no una "motocicleta", por lo que su variable debe ser nombrada motorcycle, no motorCycle.
  • Es un "mapa hash", por lo que ir con el hashMap, no hashmap.
  • "Domingo" es una palabra -> sunday, no sunDay.
  • Mientras que "día de la semana" sería dayOfWeek, no dayofweek.
oezi
fuente
44
Por lo que vale, mi equipo y yo generalmente usamos hashmapcomo una sola palabra, aunque irónicamente no lo hacemos tree map. encogiéndose de hombros
corsiKa
1
Bueno, la motocicleta es un caso marginal (de hecho, originalmente era una motocicleta, aunque ahora es algo diferente); honeyBee(y no honeybee, de hecho, no "abeja" sino "abeja"), y butterfly.
orome
3
Sin setUpembargo, el caso no direccionado es un caso límite, es una sola palabra, pero JUnithistóricamente tiene su nombre de inicialización de dispositivo setUp.
TC1
23
@ TC1 En realidad, "configuración" es un sustantivo , nunca un verbo. "Configurar" la forma correcta de la acción. JUnittiene razón, el resto de nosotros somos el caso límite. :)
Jason C
3
@JasonC Gracias, finalmente tiene sentido por qué la contraparte es tearDown: D
TC1
44

Parte 1
Creo que lo que te hace tropezar es que algunos de tus ejemplos son palabras compuestas , mientras que otros no.

  • número de teléfono // no es una palabra compuesta
  • motocicleta // palabra compuesta
  • longitud de onda // palabra compuesta
  • bloqueador solar // palabra compuesta
  • Domingo // palabra compuesta *
  • color de motocicleta // palabra compuesta utilizada con una palabra no compuesta.

Las palabras compuestas no siguen la notación de caso de camello para la segunda palabra en la palabra compuesta.

Entonces es motorcycley no motorCycle.

Sin embargo, "el número de teléfono" no es una palabra compuesta y podría seguir la notación caso de camellos. es decir phoneNumber.

Y que conduce a: motorcycleColor.

Si no puedo recordar si una palabra es realmente una palabra compuesta o no, la busco en el diccionario para estar segura.

Parte 2
Dos de tus ejemplos son un poco más complicados.

  • mapa hash
  • tabla de picadillo

Son difíciles porque algunos los deletrearán como "hashmap" y "hashtable". Según el diccionario que acabo de revisar, son palabras separadas y no una palabra compuesta. Entonces, el caso de camello correcto sería hashMapy hashTable. No todos los equipos siguen esa convención, por lo que debe preguntar a sus compañeros qué prefieren y luego seguir con eso. La consistencia es más importante en este caso que lo que un diccionario puede decir es correcto.

* Algunos discutirán acerca de que el domingo es una palabra compuesta, ya que otros días de la semana no lo son, pero a los efectos de esta pregunta, evitaré ese problema. Es más fácil tratarlo como una palabra compuesta y, por lo tanto, no es un caso de camello.


fuente
66
Los otros días de la semana también fueron compuestos: "lunes" <- día de luna, martes <- día de Tiw, miércoles <- día de Woden, jueves <- día de Thor, viernes <- día de Frigg, sábado <- día de Saturno
kevin cline
66
@kevincline: Esas formas de los nombres de los días probablemente se consideren arcaicas ahora, así que realmente no cuentan para fines prácticos. ... A menos que realmente escriba código que se parezca a if (currentDay == thorsDay) {...Hmm ... lástima que las bibliotecas de fechas no tengan eso como una opción de formato cuando desee obtener el nombre completo del día de la semana.
FrustratedWithFormsDesigner
15
@FrustratedWithFormsDesigner: el punto era que en el uso moderno, domingo es una palabra compuesta en el mismo grado que el lunes es: en absoluto. Es solo un accidente que el "Sol" en "Domingo" pueda estar solo, mientras que "Día de la Luna" se acortó a "Lunes"
Kevin Cline
66
Mejor aún, use mejores nombres para sus variables que hashMap o hashTable. Es un camino resbaladizo que conduce a esta maravillosa línea de código:HashMap hashMap = new HashMap();
Eric Andres
8

Como otros han señalado, el caso de camello se usa al unir palabras. No use camel case dentro de una sola palabra en inglés. El problema viene al determinar qué compuestos son palabras simples. Dejados en paz, los programadores tomarán diferentes decisiones dependiendo de su conocimiento del inglés. Esto lleva a inconsistencias en la capitalización, que son casi tan molestas como las faltas de ortografía.

Para evitar esto, los programadores deben usar una referencia estándar (por ejemplo, dictionary.com ) cuando no estén seguros acerca de la ortografía o las mayúsculas. Aun así, si la coherencia en los nombres es importante para su proyecto, no hay sustituto para la revisión del código.

Elegir una referencia única para su proyecto resolverá la mayoría de los argumentos sobre mayúsculas y ortografía. Hay algunos compuestos como Hashtable que no están en los diccionarios, pero se escriben en mayúsculas como palabras simples en las API de Java y C #. Deberá tomar una decisión de todo el proyecto sobre ellos. En Java, es "HashMap" pero "Hashtable". OMI "Hashtable" es claramente incorrecto; nunca aparece como una sola palabra, excepto como un nombre en una API.

Kevin Cline
fuente
4

La forma más sencilla de hacer un caso de camello es la delineación de palabras.

Ejemplos de su pregunta:

  • número de teléfono: número de teléfono
  • motocicleta: motocicleta
  • domingo: domingo
  • longitud de onda: longitud de onda

Si no lo dividirías en dos palabras, tampoco deberías usar camello. De lo contrario, lo está usando en sílabas y qué tonto se ve esto

  • auxIlIArY (Esta es una palabra de 5 sílabas; sin mencionar que me parece una mierda en fuentes no monoespaciadas / sans-serif).
Jeff Langemeier
fuente
55
número de teléfono no es su propia palabra, póngalo en google como una sola palabra, felizmente buscará todo lo que tenga "Número de teléfono", no número telefónico. Y la configuración no son dos palabras, tampoco lo es la contraseña.
Jeff Langemeier
66
@JeffLangemeier Una pequeña objeción: "configuración" es un sustantivo, mientras que "configuración" es un verbo. Por lo tanto, si tiene un objeto que representa cómo se configura algo, se llamaría setup, mientras que si tuviera una función para configurar algo, se llamaría setUp.
bdesham
2
@bdesham Me doy cuenta de eso, pero simplemente me mantendría alejado de la configuración, ya que se inicializaría un verbo mejor y menos ambiguo, en realidad olvidé por completo la versión verbal de la configuración.
Jeff Langemeier
1
Creo que el que comienza con "wa" podría ser wavelengtho waveLengthdependiendo de si el valor en cuestión se relaciona con la velocidad de propagación dividida por la frecuencia, o si se relaciona con la "longitud" (no necesariamente la distancia) de algún tipo de onda . Por ejemplo, una variable de la biblioteca de síntesis de audio para el número de muestras asociadas con una onda no sería wavelengthsino waveLength.
supercat
2
@kevincline: en los motores de síntesis de audio, es común tener tablas de ondas que contienen una o más muestras completas de una onda. Cuando la reproducción llega al final de la tabla, vuelve al principio (para motores simples) o a algún otro punto de la ola. Sin duda, WaveLengthen sí mismo sería un poco vago en cualquiera de los escenarios más simplistas [se refiere al tamaño del búfer o la longitud de la sección de bucle], pero las palabras podrían aparecer perfectamente en un nombre más largo.
supercat
4

Aquí es donde una complicación con el inglés simple se interpone en la forma en que luego se abusa del inglés para ajustarse a las reglas de tokens de espacios en blanco en contextos de programación.

De las palabras de ejemplo que da, casi todas son compuestas. El domingo no lo es, ya que si bien se originó como un complejo, lo hizo hace tanto tiempo que apenas se puede considerar uno ahora, especialmente porque estar dedicado al sol es más una curiosidad histórica que una parte fuerte de lo religioso y cultural. perspectiva de las personas de habla inglesa.

Y en inglés, las tres formas principales de escribir un compuesto son abierta (con un espacio entre las dos palabras), con guión y cerrada (sin espacio ni guión entre las dos). Y aunque hay algunas reglas sobre la separación de compuestos abiertos en ciertas situaciones, no hay muchas reglas firmes para saber qué forma se usa para un compuesto dado más allá de ver lo que hacen otras personas, y todavía hay momentos en que encontrará dos o incluso las tres formas ( batidor de huevos , eggbeater y batidor de huevos , por ejemplo).

Aquí, el número de teléfono casi siempre se escribe abierto, por lo que debe tratarse como dos palabras.

Y cuando se intercalan para formar un token, se elimina el espacio o guión y se escribe la segunda y posterior palabra en el título del caso, por lo tanto phoneNumbero PhoneNumbersegún corresponda para su convención.

Lo que hace que phoneNumberparezca extraño es probablemente que se da más comúnmente como phoneen la mayoría de los contextos, o como numbercuando el contexto se trata de una conexión telefónica.

Jon Hanna
fuente
2

Asegure la consistencia dentro del archivo de código.

Promueva la consistencia dentro del proyecto de código.

Prefiere la coherencia dentro de la biblioteca de códigos.

La combinación de palabras para representar conceptos cambia a medida que nos familiarizamos con una aglutinación dada .

Por ejemplo...

  • 'teléfono' se acortó a solo 'teléfono'
  • 'teléfono' se acortó a solo 'teléfono'
  • 'número de teléfono' a veces se contraía en 'número de teléfono'
  • 'número de teléfono' pronto se convirtió en 'número de teléfono'
  • 'número de teléfono' a menudo se acorta aún más a solo 'teléfono'
  • 'celular', o simplemente 'celular' son de uso común hoy
  • 'teléfono de casa' y 'teléfono de trabajo' pronto pueden volverse comunes también

Tenga en cuenta que el corrector ortográfico StackExchange no puede decidirse. 'Phonenumber' al final de la oración anterior estaba bien, pero marca el que está al comienzo de la oración (en mayúscula o no).

Por mucho que la mayoría de las personas desee que haya "una forma correcta" de hacer las cosas, en lo que respecta al lenguaje, eso nunca puede ser. Para cuando termine su proyecto, el uso probablemente habrá cambiado. Ciertamente, su comprensión habrá cambiado y la funcionalidad del método / et.al. probablemente también haya cambiado. (En cuyo caso, probablemente debería cambiar el nombre de manera apropiada).

DocSalvager
fuente
-1

Desde una perspectiva estrictamente técnica (EE. UU.), Donde xxx-aaa-zzzz es lo que normalmente se consideraría como un "número de teléfono", la parte xxx se conoce correctamente como el código de área, la parte aaa se conoce como el intercambio, y el zzzz se conoce adecuadamente como el número.

Como no solo "phonenumber" no es una palabra compuesta (todavía), sino que si se convierte en una, hará referencia incorrecta a algo fuera de la intención de su creador, diría que la sintaxis de camelCase requeriría phoneNumber para cualquier variable que lo haga referencia, pero si vas a hacer cualquier cosa con el sistema telefónico real, yo usaría phoneExchangeNumber para los números de siete dígitos y phoneACExchangeNumber para las versiones de diez dígitos.

MLT
fuente
1
Esto no parece ofrecer nada sustancial sobre los puntos hechos y explicados en esta respuesta anterior que se publicó más de 3 años antes
mosquito