¿Debería la variable llamarse Id o ID? [cerrado]

126

Esto es un poco pedante, pero he visto que algunas personas usan Idcomo en:

private int userId;
public int getUserId();

y otros usan:

private int userID;
public int getUserID();

¿Es uno de estos un mejor nombre que el otro? ¿Por qué? He visto esto hecho de manera muy inconsistente en grandes proyectos. Si tuviera que establecer un estándar, ¿con qué estaría familiarizada la mayoría de la gente? ¿Cuál es el estándar convencional?

Adán
fuente
40
La consistencia es lo más importante que importa. Ya sea en caso de camello, o subrayados o cualquier otra cosa. Se consistente.
38
Mire las API XML de su idioma para ver cómo lo hacen. Clases de nombres Java como SAXParsery DOMException.NET clases de nombres como XmlDocument. Basado en eso, diría "ID" en Java, "Id" en C #.
luiscubal
1
Pero los identificadores de mayúsculas, por convención, se usan en Java para campos estáticos, por lo que el nombre "ID" para el campo base no es el mejor. Y ahí viene la consistencia ...
Danubian Sailor
8
¿Nombrarías las variables EGOy SuperEGO? No lo creo. ;)
kojiro
44
¡¿Qué?! ¿Consistencia? ¿Dónde está la guerra de la ira? Eso es todo, por la presente me nomino a mí mismo el poseedor de la sagrada llama de la sintaxis de la caja de camello y por la presente decreto que hacerlo con mayúsculas para acryónimos es para novatos. Además, es correcto querer que el papel higiénico se enrolle desde la parte superior a menos que tenga gatos que se aburran y hagan cosas extrañas, en cuyo caso les resulta mucho más difícil desenredar el papel higiénico para que ruede desde la parte inferior, lo que hace que esta herejía sea aceptable para dueños de gatos No sé por qué tengo que decretar eso. Bob, el guardián de la llama sagrada del papel higiénico, está ocupado, supongo.
Erik Reppen

Respuestas:

56

La regla más importante a seguir en estos casos es la coherencia: haz lo que todos los demás hacen.

Por ejemplo, mire las API XML de su idioma para ver cómo lo hacen.

Clases de nombres Java como SAXParser y DOMException , clases de nombres .NET como XmlDocument .

Basado en eso, diría "ID" en Java, "Id" en C #.

Sin embargo, he visto que Java EE 6 tiene una anotación llamada @Id(ver documentación ), por lo que parece que Java considera "Id" como una palabra normal.

luiscubal
fuente
@ Id apunta a un nombre de clase de anotación, no a un nombre de variable. Ejemplo equivocado
Jwenting
3
SAXParser podría ser (y afortunadamente no lo es) SimpleAPIforXMLParser (o incluso SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser). Cada letra mayúscula es principio de palabra. Así que incluso en Java debería ser "Id"
user470365
2
@jwenting El problema es descubrir si "id" se considera como una palabra o como dos palabras. @Iddice que es una sola palabra, por lo que el nombre de la variable sería "id".
luiscubal
No. SAX es un acrónimo, mientras que Id no lo es.
finalmente
8
Tienes razón sobre el uso Iden C # (y .NET en general), pero por una razón diferente. La regla es poner en mayúscula todas las letras de un acrónimo de 2 letras (por ejemplo IPAddress) y solo poner en mayúscula la primera letra de acrónimos más largos (como el ejemplo que XmlDocumentusted dio). Pero Idy Okson las excepciones a esta regla, específicamente mencionadas. Para el resumen completo, vea la Capitalization Rules for Acronymssección del Capitalization Conventionsartículo. Pero incluso Microsoft rompe esa regla (por ejemplo, DbConnectionvs. DBNull)
Allon Guralnek
110

La consistencia es el rey; elige uno u otro, pero hazlo consistentemente en todas partes.

Dicho esto, prefiero la primera variación, porque no viola camelCase (hacerlo significa que tienes dos reglas de estilo para recordar, no solo una).

A veces se usan dos letras mayúsculas debido a esto , pero una identificación es realmente solo una forma de identificación.

Robert Harvey
fuente
18
Por mi parte, no me gustaría si un programa de computadora intentara acceder a mi identificación.
Blrfl
1
userIdOfSender
Sean McSomething
19
@SeanMcSomething: Ick. SenderUserId
Robert Harvey
55
Si bien estoy de acuerdo con usted en que "Id" es la forma preferida en la que puedo ver dónde entra la confusión: en la conversación diaria, en realidad lo decimos como si fuera un acrónimo, como en "¿puedo ver su identificación?"
500 - Error interno del servidor
3
Mira otras siglas en camello. Hay SoapProtocol, no SOAPProtocol. ID es la abreviatura de documento de identidad, por lo que no veo por qué debería tratarse de manera excepcional en el caso de los camellos. Dicho esto, prefiero que la ID de usuario se use de manera consistente que la ID de usuario y que la ID de usuario se use de manera inconsistente en mi programa.
Neil
76

TL; DR: en el contexto de las bibliotecas de clases .NET, Microsoft recomienda que utilice Id. Esto es ligeramente contra-intuitivo, ya que es un raro ejemplo de una abreviatura que está permitida / recomendada (las abreviaturas generalmente están mal vistas).

Si hablamos de convenciones de bibliotecas de clase C # o .NET, Microsoft tiene disponibles algunas pautas de nomenclatura bastante bien definidas . Están bien pensados, con muchas explicaciones sobre una variedad de problemas; en realidad, cada desarrollador debería tomarse un tiempo para leer toda la sección de Pautas de diseño .

Cuando se trata de acrónimos , la regla general es: para los acrónimos de dos letras, tiende a mantenerlos en mayúsculas (donde es aplicable el caso de Pascal), por lo que, por ejemplo, IOStreampodría ser el nombre de una clase. Para un acrónimo más largo, minúsculas el resto del acrónimo, por ejemplo, XmlDocumento HtmlParser. Esta es en realidad una regla mayormente inequívoca (no hay confusión en cuanto a dónde termina una palabra y comienza la siguiente, a menos que esté encadenando acrónimos de dos letras), y se acostumbra muy rápidamente.

Entonces, ¿es ID o Id? Bueno, según Microsoft, podría no ser lo que piensas:

Los acrónimos difieren de las abreviaturas en que una abreviatura acorta una sola palabra. Por ejemplo, ID es una abreviatura de identificador . En general, los nombres de biblioteca no deben usar abreviaturas.

Las dos abreviaturas que se pueden usar en los identificadores son ID y OK. En los identificadores en mayúsculas de Pascal deberían aparecer como Id y Ok. Si se usa como la primera palabra en un identificador en camello, deben aparecer como id y ok, respectivamente.

Como anécdota, no estoy seguro de cuándo comenzó a aparecer esta distinción en las pautas, pero hace unos años (alrededor de 3.0 / 3.5) la tendencia general de nombres en las bibliotecas de clases pasó de ID a Id.

Daniel B
fuente
1
Esta es la pauta que suelo seguir. Como id es una abreviatura y no un acrónimo, siempre prefiero usar 'Id'.
Toby
Uso ID porque luego rompe la convención y se destaca por ser único, y me gusta la ironía de eso :)
RhysW
Creo que Microsoft está equivocado. La identificación es una inicialidad del documento de identidad, no es la abreviatura de identidad. (Pendientemente, los acrónimos son pronunciables.)
Tom Hawtin - tackline
@ TomHawtin-tackline Haces un punto interesante, aunque sospecho que depende del contexto. Algo así como una propiedad IDNumber en un objeto Person tendría mucho sentido, pero ¿para un VehicleId leer como "Documento de identidad del vehículo" versus "Identificador del vehículo"? En contextos de programación, identificador es una palabra bastante común para cualquier cosa que identifique de forma única una instancia, y diría que es más aplicable aquí.
Daniel B
@DanielB En lenguajes de computadora, incluso SQL, "identificador" generalmente se refiere a un nombre, como el nombre de una columna. Por lo general, se abrevia como "ident". El vehículo es un ejemplo interesante porque existen esquemas VIN establecidos (números de identificación del vehículo). En un contexto de programación típico, el "documento" para una entidad es un número (incluso podría ser una capacidad inolvidable).
Tom Hawtin - tackline
15

Leí una muy buena explicación en el documento de algunas convenciones de codificación. CamelCase siempre debe usarse para acrónimos y abreviaturas, porque es más fácil distinguir los límites de las palabras (comparar XmlIdWritercon XMLIDWriter).

dorado
fuente
12
Aquí hay una idea aún mejor para distinguir los límites de palabras: ¡límites de palabras reales! xml_id_writer.
Kaz
44
@Kaz Bueno, duh! Sin embargo, CamelCase se usa tradicionalmente en algunos idiomas y parecería bastante fuera de lugar usar guiones bajos en tales situaciones. La consistencia es el rey, como se mencionó anteriormente.
dorado
1
Usar CamelCase solo porque las bibliotecas centrales de algunos idiomas lo usan no es coherente, sino más bien conformidad.
Kaz
3
@Kaz: Tienes batallas más grandes para pelear en tu tienda que las convenciones de código.
Robert Harvey
2

Como podemos ver en la función predeterminada de JavaScript getElementById (); La identificación está escrita en el caso Camel ...

Use 'id' si lo usa con un guión bajo. Ejemplo: id_usuario

Use 'Id' si nombra una var sin subrayado para diferenciar las diferentes palabras. Ejemplo: userId

Si es una variable de una sola palabra, debe estar en minúscula completa, si hay varias palabras var, use minúsculas en Camel. Ejemplo: thisIsExample

Pero no recomendaría 'ID' en mayúsculas porque generalmente utilizamos mayúsculas para definir CONSTANTES.

Sukrit Gupta
fuente
En su tercer párrafo, ¿su ejemplo no parece coincidir con su texto?
ruakh
@ruakh gracias ... Rectificado ..
Sukrit Gupta
0

Primero, evite la abreviatura.

En segundo lugar, si la abreviatura es muy conocida, recomiendo usar el caso camel.

Eso es porque no es necesario tener en cuenta el significado de eso. solo trata como una palabra normal

Sungguk Lim
fuente