A variável deve ser nomeada Id ou ID? [fechadas]

126

Isso é um pouco pedante, mas já vi algumas pessoas usarem Idcomo:

private int userId;
public int getUserId();

e outros usam:

private int userID;
public int getUserID();

Um desses nomes é melhor que o outro? Por quê? Eu já vi isso ser feito de maneira inconsistente em grandes projetos. Se eu estabelecesse um padrão com o qual a maioria das pessoas estaria familiarizada? Qual é o padrão convencional?

Adão
fonte
40
Consistência é a coisa mais importante que importa. Seja estojo de camelo, sublinhado ou outros enfeites. Ser consistente.
38
Veja as APIs XML do seu idioma para ver como elas o fazem. Java nomeia classes como SAXParsere DOMException, .NET nomeia classes como XmlDocument. Com base nisso, eu diria "ID" em Java, "Id" em C #.
luiscubal
1
Mas os identificadores em maiúsculas, por convenção, são usados ​​em Java para campos estáticos; portanto, o nome "ID" para o campo base não é o melhor. E lá vem a consistência ...
Sailor Danubian
8
Você nomearia as variáveis EGOe SuperEGO? Eu acho que não. ;)
kojiro 08/02
4
O que?! Consistência? Onde está a guerra da raiva ?! É isso, nomeio-me como guardião da chama sagrada da caixa de camelos e decido que fazê-lo com letras maiúsculas para acrônimos é para noobs. Além disso, é correto querer enrolar o papel higiênico a partir do topo, a menos que você tenha gatos entediados e faça coisas estranhas; nesse caso, eles têm muito mais dificuldade em desvendar o papel higiênico definido para rolar por baixo, tornando essa heresia aceitável para donos de gatos. Não sei por que decido sobre isso. Bob, o guardião da chama sagrada da direção do rolo de papel higiênico, está ocupado, eu acho.
Erik Reppen

Respostas:

56

A regra mais importante a seguir nesses casos é a consistência: faça como todo mundo faz.

Por exemplo, observe as APIs XML do seu idioma para ver como elas o fazem.

Java nomeia classes como SAXParser e DOMException , .NET nomeia classes como XmlDocument .

Com base nisso, eu diria "ID" em Java, "Id" em C #.

No entanto, vi que o Java EE 6 tem uma anotação chamada @Id(consulte a documentação ), portanto, parece que o Java considera "Id" apenas uma palavra normal.

luiscubal
fonte
@Id aponta para um nome de classe de anotação, não para um nome de variável. Exemplo errado.
Jwenting
3
O SAXParser pode ser (e felizmente não é) SimpleAPIforXMLParser (ou mesmo SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser). Cada letra maiúscula começa com a palavra. Assim, mesmo em java que deve ser "Id"
user470365
2
@jwenting O problema é descobrir se "id" é considerado como uma palavra ou como duas palavras. @Iddiz que é uma palavra única, portanto o nome da variável seria "id".
12133 luiscubal
Não. SAX é um acrônimo, enquanto Id não.
nalply
8
Você está certo quanto ao uso Idem C # (e .NET em geral), mas por um motivo diferente. A regra é colocar em maiúscula todas as letras de um acrônimo de 2 letras (por exemplo IPAddress) e apenas em maiúscula a primeira letra de acrônimos mais longos (como no exemplo que XmlDocumentvocê forneceu). Mas Ide Oksão as exceções a esta regra, especificamente mencionadas. Para o resumo completo, consulte a Capitalization Rules for Acronymsseção do Capitalization Conventionsartigo. Mas até mesmo a Microsoft quebra essa regra (por exemplo DbConnectionvs. DBNull)
Allon Guralnek
110

A consistência é rei; escolha um ou outro, mas faça-o de maneira consistente em todos os lugares.

Dito isso, prefiro a primeira variação, porque ela não viola o camelCase (isso significa que você tem duas regras de estilo para se lembrar, não apenas uma).

Às vezes, duas letras maiúsculas são usadas por causa disso , mas um ID é realmente apenas uma forma de identificação de identificação.

Robert Harvey
fonte
18
Eu, pelo menos, não gostaria que um programa de computador estivesse tentando acessar minha identidade.
Blrfl
1
userIdOfSender
Sean McSomething
19
@SeanMcSomething: Ick. SenderUserId
Robert Harvey
5
Embora eu concorde com você que "Id" é a maneira preferida para ver de onde vem a confusão: nas conversas diárias, na verdade, dizemos isso como se fosse um acrônimo, como em "posso ver seu ID?"
500 - Erro interno do servidor
3
Veja outras siglas no estojo de camelo. Há SoapProtocol, não SOAPProtocol. O ID é uma abreviação de documento de identidade, portanto não vejo por que ele deve ser tratado de maneira excepcional no caso de camelo. Dito isto, eu prefiro o ID do usuário usado consistentemente do que o ID do usuário e o ID do usuário usados ​​inconsistentemente no meu programa.
Neil
76

TL; DR: No contexto das bibliotecas de classes .NET, a Microsoft recomenda que você use o ID. Isso é um pouco contra-intuitivo, pois é um exemplo raro de abreviação que é permitido / recomendado (abreviações geralmente são desaprovadas).

Se estamos falando de convenções da biblioteca de classes C # ou .NET, a Microsoft tem algumas diretrizes de nomenclatura bastante bem definidas disponíveis. Eles são bem pensados, com muitas explicações sobre uma variedade de questões - na verdade, todo desenvolvedor deve levar algum tempo para ler a seção inteira das Diretrizes de design .

Quando se trata de acrônimos , a regra geral é: para acrônimos de duas letras, você tende a mantê-los em maiúsculas (onde o caso Pascal é aplicável); portanto, por exemplo, IOStreampode ser o nome de uma classe. Para um acrônimo mais longo, você diminui o resto do acrônimo, por exemplo, XmlDocumentou HtmlParser. Essa é, na verdade, uma regra quase inequívoca (não há confusão sobre onde uma palavra termina e a próxima começa, a menos que você esteja encadeando siglas de duas letras), e você se acostuma rapidamente.

Então, é ID ou Id? Bem, de acordo com a Microsoft, pode não ser o que você pensa:

Os acrônimos diferem das abreviações , pois uma abreviação reduz uma única palavra. Por exemplo, ID é uma abreviação de identificador . Em geral, os nomes das bibliotecas não devem usar abreviações.

As duas abreviações que podem ser usadas nos identificadores são ID e OK. Nos identificadores baseados em Pascal, eles devem aparecer como Id e Ok. Se usado como a primeira palavra em um identificador de camelo, eles devem aparecer como id e ok, respectivamente.

Curiosamente, não tenho certeza de quando essa distinção começou a aparecer nas diretrizes, mas, alguns anos atrás (em torno de 3,0 / 3,5), a tendência geral de nomes nas bibliotecas de classes passou de ID para Id.

Daniel B
fonte
1
Essa é a orientação que eu costumo seguir. Como id é uma abreviação e não um acrônimo, eu sempre prefiro usar 'Id'.
9603 Toby
Eu uso ID becuase em seguida, ele rompe a convenção e se destaca como sendo único, e eu gosto da ironia de que :)
RhysW
Eu acho que a Microsoft está errada. ID é um inicialismo para o Documento de Identidade, não é abreviação de identidade. (Pedanticamente, os acrônimos são pronunciáveis.)
Tom Hawtin - tackline
@ TomHawtin-tackline Você faz uma observação interessante, embora eu suspeite que isso depende do contexto. Algo como uma propriedade IDNumber em um objeto Person faria muito sentido, mas para um VehicleId ler como "Documento de identidade do veículo" versus "Identificador do veículo"? Em contextos de programação, identificador é uma palavra bastante comum para qualquer coisa que identifique exclusivamente uma instância, e eu argumentaria que é mais aplicável aqui.
Daniel B
@DanielB Em linguagens de computador, mesmo SQL, "identificador" geralmente se refere a um nome, como o nome de uma coluna. Normalmente, é abreviado para "ident". O veículo é um exemplo interessante, porque existem esquemas VIN estabelecidos (números de identificação do veículo). Em um contexto de programação típico, o "documento" para uma entidade é um número (pode até ser um recurso imperdoável).
Tom Hawtin - defina
15

Li uma explicação muito boa no documento de algumas convenções de codificação. O CamelCase sempre deve ser usado para acrônimos e abreviações, porque é mais fácil distinguir os limites das palavras (compare XmlIdWritercom XMLIDWriter).

dourar
fonte
12
Aqui está uma idéia ainda melhor para distinguir limites de palavras: limites reais de palavras! xml_id_writer.
Kaz
4
@Kaz Bem, duh! No entanto, o CamelCase é usado tradicionalmente em alguns idiomas e parece fora do lugar usar sublinhados nessas situações. A consistência é rei, como mencionado anteriormente.
Gilden
1
Usar o CamelCase apenas porque as bibliotecas principais de alguma linguagem o usam não é consistência, mas conformidade.
Kaz
3
@Kaz: Você tem batalhas maiores para lutar em sua loja do que convenções de código.
Robert Harvey
2

Como podemos ver na função padrão do JavaScript getElementById (); Id está escrito no caso Camel ...

Use 'id' se estiver usando um sublinhado. Exemplo: user_id

Use 'Id' se nomear um var sem sublinhado para diferenciar as diferentes palavras. Exemplo: userId

Se for uma variável de palavra única, ela deve estar em minúsculas completa, se várias palavras var forem usadas em minúsculas Camel. Exemplo: thisIsExample

Mas eu não recomendaria 'ID' tudo no CAPS, porque geralmente usamos todos os limites para definir CONSTANTES.

Sukrit Gupta
fonte
No seu terceiro parágrafo, seu exemplo parece não corresponder ao seu texto?
Ruakh
@ruakh thanx .. Retificado ..
Sukrit Gupta
0

Primeiro, evite a abreviação.

Segundo, se a abreviação for super conhecida, recomendo usar camel case.

Isso porque você não precisa considerar o significado disso. apenas trate como uma palavra normal

Sungguk Lim
fonte