Должна ли переменная называться Id или ID? [закрыто]

126

Это немного педантично, но я видел, как некоторые люди используют Idкак:

private int userId;
public int getUserId();

и другие используют:

private int userID;
public int getUserID();

Одно из них лучше, чем другое? Почему? Я видел, что это было сделано очень непоследовательно в больших проектах. Если бы я установил стандарт, с которым большинство людей были бы знакомы? Какой стандарт является стандартным?

Адам
источник
40
Последовательность - самая важная вещь, которая имеет значение. Будь то верблюжий случай, или подчеркивание или еще много чего. Быть последовательным.
38
Посмотрите на XML API вашего языка, чтобы увидеть, как они это делают. Java называет классы как SAXParserи DOMException.NET называет классы как XmlDocument. Исходя из этого, я бы сказал «ID» в Java, «Id» в C #.
августа
1
Но идентификаторы в верхнем регистре, по соглашению, используются в Java для статических полей, поэтому имя «ID» для базового поля не является лучшим. И наступает последовательность ...
Дунайский моряк
8
Вы бы назвали переменные EGOи SuperEGO? Я так не думаю. ;)
Кодзиро
4
Какая?! Последовательность? Где война ярости ?! Вот и все, я назначаю себя хранителем священного синтаксического пламени верблюжьего футляра и тем самым постановляю, что делать это со всеми заглавными буквами для акрионимов - для нубов. Кроме того, правильно иметь рулон туалетной бумаги сверху, если только у вас нет кошек, которым скучно и они делают странные вещи, и в этом случае им гораздо труднее распутать набор туалетной бумаги, чтобы катиться снизу, что делает такую ​​ересь приемлемой для владельцы кошек. Я не знаю, почему я получил указ об этом. Полагаю, Боб, хранитель священного огня в направлении туалетной бумаги, занят.
Эрик Реппен

Ответы:

56

Самым важным правилом, которому нужно следовать в этих случаях, является последовательность: делай как все.

Например, посмотрите на XML API вашего языка, чтобы увидеть, как они это делают.

Классы имен Java, такие как SAXParser и DOMException , классы имен .NET, такие как XmlDocument .

Исходя из этого, я бы сказал «ID» в Java, «Id» в C #.

Тем не менее, я видел, что Java EE 6 имеет именованную аннотацию @Id(см. Документацию ), поэтому кажется, что Java считает «Id» обычным словом.

luiscubal
источник
@Id указывает на имя класса аннотации, а не на имя переменной. Неправильный пример.
jwenting
3
SAXParser может быть (и, к счастью, нет) SimpleAPIforXMLParser (или даже SimpleApplicationProgramingInterfaceforExtesibleMarkupLanguageParser). Каждая заглавная буква начинается со слова. Так что даже в Java это должен быть "Id"
user470365
2
@jwenting Проблема в том, чтобы выяснить, считается ли «id» словом или двумя словами. @Idговорит, что это одно слово, поэтому имя переменной будет "id".
luiscubal
Нет. SAX - это сокращение, а Id - нет.
Вскоре
8
Вы правы насчет использования Idв C # (и .NET в целом), но по другой причине. Правило состоит в том, что все буквы двухбуквенного аббревиатуры (например IPAddress) пишутся с заглавной буквы, и только заглавные буквы более длинных аббревиатур (как в приведенном XmlDocumentвами примере ). Но Idи Okесть исключения из этого правила, специально упомянутые. Для полного резюме, см. Capitalization Rules for AcronymsРаздел Capitalization Conventionsстатьи. Но даже Microsoft нарушает это правило (например, DbConnectionпротив DBNull)
Аллон Гуралнек
110

Последовательность является королем; выберите один или другой, но делайте это последовательно везде.

Тем не менее, я предпочитаю первый вариант, потому что он не нарушает camelCase (это означает, что вы должны помнить два правила стиля, а не только одно).

Из-за этого иногда используются две заглавные буквы , но идентификатор на самом деле является просто формой идентификации Id.

Роберт Харви
источник
18
Мне, например, не понравилось бы, если бы компьютерная программа пыталась получить доступ к моему идентификатору.
Blrfl
1
userIdOfSender
Шон МакSomething
19
@SeanMcSomething: Ick. SenderUserId
Роберт Харви
5
Хотя я согласен с вами, что «Id» является предпочтительным способом, с помощью которого я вижу, где возникает путаница: в повседневной беседе мы на самом деле говорим это как аббревиатуру, например, «могу ли я увидеть ваше удостоверение личности?»
500 - Внутренняя ошибка сервера
3
Посмотрите на другие сокращения в случае верблюда. Есть SoapProtocol, а не SOAPProtocol. Идентификатор - это сокращение от документа, удостоверяющего личность, поэтому я не понимаю, почему его следует рассматривать в исключительном случае в случае верблюда. Тем не менее, я бы предпочел, чтобы userID использовался последовательно, чем userId и userID использовались непоследовательно в моей программе.
Нил
76

TL; DR: в контексте библиотек классов .NET Microsoft рекомендует использовать Id. Это немного нелогично, так как это редкий пример аббревиатуры, которая разрешена / рекомендована (аббревиатуры обычно не одобряются).

Если мы говорим о соглашениях библиотек классов C # или .NET, у Microsoft есть довольно четко определенные правила именования . Они хорошо продуманы, со множеством объяснений по различным вопросам - на самом деле, каждому разработчику нужно некоторое время, чтобы прочитать весь раздел Руководства по проектированию .

Когда дело доходит до аббревиатур , эмпирическое правило таково: для двухбуквенных акронимов вы, как правило, держите их в верхнем регистре (где применяется регистр Паскаля), поэтому, например, IOStreamможет быть именем класса. Для более длинного аббревиатуры вы должны использовать нижний регистр остальной аббревиатуры, например, XmlDocumentили HtmlParser. На самом деле это в основном однозначное правило (нет никакой путаницы относительно того, где заканчивается одно слово и начинается следующее, если вы не объединяете двухбуквенные аббревиатуры), и вы очень быстро привыкаете к нему.

Так это идентификатор или идентификатор? Ну, по словам Microsoft, это может быть не то, что вы думаете:

Сокращения отличаются от сокращений тем, что сокращение сокращает одно слово. Например, ID - это сокращение от идентификатора . В общем, имена библиотек не должны использовать сокращения.

В идентификаторах можно использовать две аббревиатуры: ID и OK. В идентификаторах Pascal они должны отображаться как Id и Ok. Если они используются в качестве первого слова в идентификаторе в верблюжьей клетке, они должны отображаться как id и ok, соответственно.

Как ни странно, я не совсем уверен, когда это различие стало появляться в руководствах, но несколько лет назад (около 3.0 / 3.5) общая тенденция именования в библиотеках классов перешла от ID к Id.

Даниэль Б
источник
1
Это правило, которым я обычно следую. Поскольку id - это аббревиатура, а не аббревиатура, я всегда предпочитаю использовать «Id».
Тоби
Я использую ID, потому что тогда он нарушает соглашение и выделяется как уникальный, и мне нравится ирония этого :)
RhysW
Я думаю, что Microsoft не правы. Идентификатор является инициализмом для документа, удостоверяющего личность, а не для идентификации. (Педантично, аббревиатуры можно произносить.)
Том Хотин -
@ TomHawtin-tackline Вы делаете интересное замечание, хотя я подозреваю, что это зависит от контекста. Что-то вроде свойства IDNumber в объекте Person имело бы много смысла, но для VehicleId читать как «Идентификационный номер транспортного средства» вместо «Идентификатор транспортного средства»? В контексте программирования идентификатор - это довольно распространенное слово для всего, что уникально идентифицирует экземпляр, и я бы сказал, что здесь он более применим.
Даниэль Б
@DanielB В компьютерных языках, даже в SQL, «идентификатор» обычно относится к имени, например имени столбца. Обычно это сокращается до «идент». Автомобиль является интересным примером, потому что существуют установленные схемы VIN (идентификационные номера транспортных средств). В типичном контексте программирования «документ» для сущности - это число (это может быть даже не поддаваемая возможность).
Том Хотин - tackline
15

Я прочитал очень хорошее объяснение в документе некоторых соглашений по кодированию. CamelCase всегда следует использовать для сокращений и аббревиатур, потому что легче различать границы слов (сравнивать XmlIdWriterс XMLIDWriter).

Gilden
источник
12
Вот еще лучшая идея для различения границ слов: фактические границы слов! xml_id_writer,
Каз
4
@ Каз Ну, да! Тем не менее, CamelCase традиционно используется в некоторых языках, и было бы неуместно использовать подчеркивание в таких ситуациях. Последовательность - король, как упомянуто ранее.
позолота
1
Использование CamelCase только потому, что в базовых библиотеках некоторых языков используется не согласованность, а соответствие.
Каз
3
@Kaz: У вас есть большие сражения в вашем магазине, чем соглашения кодекса.
Роберт Харви
2

Как мы видим в JavaScript-функции по умолчанию getElementById (); Идентификатор написано в случае верблюда ...

Используйте 'id', если используете с подчеркиванием. Пример: user_id

Используйте «Id», если называете переменную без подчеркивания, чтобы различать разные слова. Пример: userId

Если это переменная, состоящая из одного слова, она должна быть в нижнем регистре, если несколько слов var, тогда использовать нижний регистр Camel. Пример: thisIsExample

Но я бы не рекомендовал использовать «ID» в CAPS, потому что мы обычно используем все ограничения для определения CONSTANTS.

Сукрит Гупта
источник
В третьем абзаце ваш пример не соответствует вашему тексту?
Руах
@ruakh спасибо .. Исправлено ..
Сукрит Гупта
0

Во-первых, избегайте аббревиатур.

Во-вторых, если аббревиатура очень хорошо известна, я рекомендую использовать верблюжий чехол.

Это потому, что вам не нужно учитывать значение этого. просто относись как к нормальному слову

Сунггук Лим
источник