Акронимы в CamelCase

У меня есть сомнения насчет CamelCase. Предположим, у вас есть эта аббревиатура: Unesco = United Nations Educational, Scientific and Cultural Organization.

Вы должны написать: unitedNationsEducationalScientificAndCulturalOrganization

Но что, если вам нужно написать аббревиатуру? Что-то типа:

getUnescoProperties();

Правильно ли так писать? getUnescoProperties() ИЛИ getUNESCOProperties();


person gal007    schedule 20.03.2013    source источник
comment
Разве это не должно быть на программистах.SE?   -  person Pacerier    schedule 27.07.2015
comment
Преобразование IMO в snake_case показывает лучшее решение. Вам нравится get_unesco_properties или get_u_n_e_s_c_o_properties?   -  person jchook    schedule 05.04.2018
comment
Связанное сообщение - Должна ли переменная называться Id или ID?   -  person RBT    schedule 06.08.2019
comment
Связанный вопрос: stackoverflow.com/questions/4504508/camel-casing-acronyms   -  person Anton Tarasenko    schedule 21.05.2020


Ответы (11)


Некоторые рекомендации, о которых написала Microsoft, camelCase:

При использовании сокращений используйте регистр Паскаля или верблюжий регистр для сокращений длиной более двух символов. Например, используйте HtmlButton или htmlButton. Тем не менее, вы должны использовать аббревиатуры, состоящие только из двух символов, например System.IO вместо System.Io.

Не используйте сокращения в идентификаторах или именах параметров. Если вам необходимо использовать сокращения, используйте верблюжий регистр для сокращений, которые состоят из более чем двух символов, даже если это противоречит стандартному сокращению слова.

Подводя итоги:

  • Если вы используете аббревиатуру или аббревиатуру, состоящую из двух символов, заключайте их все в заглавные буквы;

  • Если аббревиатура длиннее двух символов, используйте заглавную букву для первого символа.

Итак, в вашем конкретном случае getUnescoProperties() правильно.

person Apollo SOFTWARE    schedule 20.03.2013
comment
Думаю, мне следует начать использовать ID вместо Id (который я использую / вижу везде) - person jasonscript; 19.12.2013
comment
Технически ID не является аббревиатурой (это аббревиатура идентификатора или идентификатора), но я действительно не знаю, как / помогает ли это руководство с этим. : - \ - person bryant; 16.04.2014
comment
Хм, а как насчет использования множественного числа с акронимами? getUris () звучит не очень хорошо. - person Vlad Ilie; 14.07.2014
comment
Не думаю, что это хороший стандарт. Различение обычных сокращений, двухбуквенных сокращений и обычных слов кажется слишком сложным и противоречит идее согласованного соглашения об именах. - person Sam; 16.09.2014
comment
Кроме того, особая обработка аббревиатур кажется глупой, поскольку это верблюжий регистр, а не английский! - person Sam; 16.09.2014
comment
Кроме того, заявление Microsoft ничего не значит. - person Sam; 16.09.2014
comment
Что за дурацкое руководство от MS. - person Josef Sábl; 03.06.2016
comment
Приятно знать, что они следуют своим собственным правилам: изначально XMLHttpRequest() пришел от Microsoft. - person Makyen♦; 07.08.2016
comment
@Makyen, в данном случае нет. XML состоит из трех букв, поэтому, согласно правилам, только первая буква должна быть заглавной. - person Yar; 10.08.2016
comment
@ Яр, я был саркастичен. Я должен был быть более ясным, что было моим намерением, имея смайлик :-). - person Makyen♦; 10.08.2016
comment
Согласитесь, что для двухбуквенных сокращений не должно быть исключений. См. Класс DbContext. Выглядит лучше, чем DBContext. - person Rustem Zinnatullin; 21.03.2019
comment
@jasonscript С каких это пор Id стало аббревиатурой? Это сокращение от идентификатора, поэтому, IMO, вы уже правы с идентификатором против идентификатора. Последнее неверно. :) - person Josh M.; 22.04.2019
comment
@RustemZinnatullin DB Это не аббревиатура, и не Db, это просто сокращение для базы данных, конечно, которое представляет собой одно слово и, следовательно, не сокращается, но сокращается. :) - person Josh M.; 22.04.2019
comment
@Josh M, ID - это аббревиатура от Identifying Datum, поэтому Id явно неверен: P См. - person ttugates; 05.09.2019
comment
@ttugates, в моем мире Id - это сокращение от Identifier. Думаю, это зависит от того, что вы делаете / работаете. - person Josh M.; 05.09.2019
comment
А как насчет однобуквенных сокращений? - person jbyrd; 05.03.2020
comment
Сокращение слов идентификатор, личность, идентификация и т. Д. Как ID с заглавной буквой D (и, что еще хуже, произносить его / eye-dee /) явно неправильно и сильно раздражает. Я предполагаю, что люди запутались с аббревиатурой документа, удостоверяющего личность, или какой-либо другой многословной фразой, или с штатом Айдахо в США (но почти наверняка не с идентификатором Datum, @ttugates). Или, может быть, их беспокоит путаница с фрейдистской психологией, например: «Что у вас на уме?», Источник моих импульсов и основных процессов. - person Denis Howe; 19.01.2021

Есть законная критика совета Microsoft из принятого ответа.

  • Inconsistent treatment of acronyms/initialisms depending on number of characters:
    • playerID vs playerId vs playerIdentifier.
  • The question of whether two-letter acronyms should still be capitalized if they appear at the start of the identifier:
    • USTaxes vs usTaxes
  • Difficulty in distinguishing multiple acronyms:
    • i.e. USID vs usId (or parseDBMXML in Wikipedia's example).

Поэтому я отправлю этот ответ в качестве альтернативы принятому ответу. Ко всем аббревиатурам следует относиться последовательно; аббревиатуры следует рассматривать как любые другие слова. Цитата из Википедии:

... некоторые программисты предпочитают трактовать сокращения как слова в нижнем регистре ...

Итак, re: вопрос OP, я согласен с принятым ответом; это правильно: getUnescoProperties()

Но я думаю, что на этих примерах я пришел к другому выводу:

  • US TaxesusTaxes
  • Player IDplayerId

Итак, проголосуйте за этот ответ, если вы считаете, что двухбуквенные аббревиатуры следует рассматривать так же, как и другие аббревиатуры.

Camel Case - это соглашение, а не спецификация. Я полагаю, что это общепринятые общепринятые правила.

(РЕДАКТИРОВАТЬ: удаление этого предложения о том, что голосование должно решить эту проблему; как говорит @Brian David; Stack Overflow не является «конкурсом популярности», и этот вопрос был закрыт как «основанный на мнении»)

Несмотря на то, что многие предпочитают рассматривать аббревиатуры как любые другие слова, более распространенной практикой может быть использование аббревиатур только заглавными буквами (даже если это приводит к «мерзости»).

Другие ресурсы:

person Community    schedule 27.11.2014
comment
1) Нет противоречий. Id - это аббревиатура, а не акроним. 2) Это зависит от контекста идентификатора, т. Е. Класса, интерфейса, атрибута, типа перечисления, статического поля, параметра, метода, свойства или события. Если для идентификатора используется PascalCase, то это будут USTaxes и PlayerId; camelCase: usTaxes и playerId. 3) Это будет USId в PascalCase, usId в camelCase и parseDbmXml в camelCase. - person Frederik Krautwald; 26.05.2015
comment
Вы правы, это аббревиатура. Я считаю, что это должны быть UsTaxes, UsId. Двухбуквенное сокращение или акроним не следует рассматривать иначе, чем трехбуквенные или другие обычные слова. Другой совет из ответа @Eonil - вообще избегать сокращений. UnitedStatesTaxes или playerIdentifier. - person The Red Pea; 26.05.2015
comment
Причина, по которой Квалина и др. Решили по-разному трактовать двухсимвольные акронимы, заключалась прежде всего в том, чтобы избежать путаницы. Возьмем для примера налоги в США: TransferUSTaxes() vs TransferUsTaxes(). Или используя пример, приведенный в Руководстве по проектированию фреймворка, closeIOStream vs closeIoStream. Сокращения не приветствуются. Единственные два исключения: ok и id. - person Frederik Krautwald; 27.05.2015
comment
Спасибо, что процитировали Квалину; Я не понял, что ссылка Microsoft, которую я цитировал, взята из Framework Design Рекомендации. Ссылка Microsoft не объясняет, почему две буквы являются исключением. В качестве примера они приводят IO. Я не знаю ни слова Ио. И я неоднозначно отношусь к его советам, поощряющим использование сокращений, даже если они хорошо известны. - person The Red Pea; 28.05.2015
comment
Io, существительное, множественное число ios: маленький ястреб, Buteo solitarius. Io , существительное: 1) Классическая мифология. женщина, любимая Зевсом, отождествляемая египтянами с Исидой. 2) Астрономия. большой вулканически активный спутник планеты Юпитер. Ио, Символ, химия: ионий. Ио.: Айова. Ввод / вывод: 1) внутри-внешний. 2) Компьютеры. ввод / вывод. I.O: косвенный объект. - person Frederik Krautwald; 28.05.2015
comment
Рекомендации по разработке структуры не поощряют использование акронимов или сокращений. Фактически, авторы совершенно ясно заявляют, что их следует избегать, если их использование не будет хорошо изучено и не приведет к двусмысленности. - person Frederik Krautwald; 28.05.2015
comment
Microsoft соответствует требованиям, где это возможно .... И, возможно, кто-то также перепутает System.Io с моим школьным талисманом 'io. Итак, мне нравится ваш вывод, что их следует избегать, если только их использование не будет хорошо изучено и не приведет к двусмысленности. Я признаю, что USTaxes может регистрироваться быстрее, чем UsTaxes. Говорят ли в Руководстве по дизайну фреймворка что-то о двух символах? - person The Red Pea; 28.05.2015
comment
Ха-ха. Я сомневаюсь, что возникнет путаница - очень большая, - но рекомендации - это, в общем, рекомендации для предотвращения возможной путаницы. Выдуманный (плохой) пример аббревиатуры в научном контексте: InIN(item) vs InIn(item) (подсказка: IN - это дюйм (а)). Или IDById(id) vs IdById(id), контекстная наука (подсказка: ID означает инфекционное заболевание). Длина двух символов - что в каком контексте? - person Frederik Krautwald; 29.05.2015
comment
По ссылке Microsoft ... используйте регистр Паскаля или верблюжий регистр для сокращений длиной более двух символов. ... Однако вы должны использовать аббревиатуры, состоящие из только двух символов, с заглавной буквы ... Это та часть, которую я бы назвал несогласованной. Лучшая характеристика - исключение. И, по крайней мере, вы объяснили, почему двухбуквенные сокращения могут вызывать большую путаницу. Но я думаю, этим программам с CanCan просто не повезло; двусмысленно, будь то танец-движение или сеть сообщества Cercle de l'Aviron de Nantes :) - person The Red Pea; 29.05.2015
comment
Да, эта двухсимвольная аббревиатура эквивалентна Руководству по разработке структуры. Последовательность - это постоянное следование руководящим принципам, включая исключения из руководящих указаний. Думаю, ввод-вывод устраняет разговоры об опечатке: имел ли он в виду In? - person Frederik Krautwald; 29.05.2015
comment
Автор Capital Offense: How to Handle Abbrevations in CamelCase правильно использует термин "мерзость", когда он пишет: Хотя [использование аббревиатур в верхнем регистре] работает в простых случаях, это приводит к мерзости, когда одна аббревиатура следует за другой: HTTPURLConnection, XMLIDREF - person kghastie; 14.07.2015
comment
@kghastie Хорошая ссылка. В этой статье упоминается Python PEP-8, что делает ужасный выбор :) - person The Red Pea; 14.07.2015
comment
люблю этот ответ. любая критика Microsoft приветствуется; p - person Line; 15.10.2018
comment
@Frederik Krautwald: 1) Есть аргумент, что ID был (по крайней мере, изначально) аббревиатурой для документа, удостоверяющего личность, до того, как он был похищен, что также означало идентификацию или личность. 2) Это тот случай, когда сам естественный язык непоследователен (шокирует, я знаю), потому что даже если бы это было сокращение, почти все аббревиатуры пишутся в нижнем регистре (или, в лучшем случае, в правильном регистре). если они принадлежат к существительному, которое не является идентификацией или идентичностью) не заглавными буквами. - person Tom; 29.10.2018
comment
Если оставить двухбуквенные сокращения в верхнем регистре, теряются границы слов, что и составляет основу соглашения. - person Denis Howe; 19.01.2021

Для преобразования в CamelCase существует также (почти) детерминированный случай Camel от Google. алгоритм:

Начиная с прозаической формы имени:

  1. Преобразуйте фразу в простой ASCII и удалите все апострофы. Например, «алгоритм Мюллера» может стать «алгоритмом Мюллера».
  2. Divide this result into words, splitting on spaces and any remaining punctuation (typically hyphens).
    1. Recommended: if any word already has a conventional camel case appearance in common usage, split this into its constituent parts (e.g., "AdWords" becomes "ad words"). Note that a word such as "iOS" is not really in camel case per se; it defies any convention, so this recommendation does not apply.
  3. Now lowercase everything (including acronyms), then uppercase only the first character of:
    1. … each word, to yield upper camel case, or
    2. … Каждое слово, кроме первого, чтобы получить верблюжий регистр в нижнем регистре
  4. Наконец, объедините все слова в единый идентификатор.

Обратите внимание, что регистр оригинальных слов почти полностью игнорируется.

В следующих примерах «XML HTTP-запрос» правильно преобразован в XmlHttpRequest, XMLHTTPRequest неверен.

person serv-inc    schedule 01.08.2017

getUnescoProperties() должно быть лучшим решением ...

Когда возможно, просто следуйте чистому camelCase, когда у вас есть сокращения, просто используйте верхний регистр, когда это возможно, в противном случае используйте camelCase.

Обычно в объектно-ориентированном программировании переменные должны начинаться с буквы нижнего регистра (lowerCamelCase), а класс должен начинаться с буквы верхнего регистра (UpperCamelCase).

Если сомневаетесь, просто идите на чистую camelCase;)

parseXML в порядке, parseXml тоже camelCase

XMLHTTPRequest должно быть XmlHttpRequest или xmlHttpRequest нельзя использовать последующие аббревиатуры в верхнем регистре, это определенно не ясно для всех тестовых случаев.

например как вы читаете это слово HTTPSSLRequest, HTTP + SSL или HTTPS + SL (это ничего не значит, кроме ...), в этом случае следуйте соглашению о верблюжьих регистрах и выбирайте httpSslRequest или httpsSlRequest, может быть, это уже неприятно, но определенно яснее.

person luk_z    schedule 28.06.2016
comment
Мне нравится ваш HTTPSSL пример, хотя SL ничего не значит, как насчет HTTPSSHTunnel? Это HTTPS + SH (оболочка) или HTTP + SSH? Соглашение Google определенно менее двусмысленно. - person L. Holanda; 21.06.2019

На github есть руководство по стилю JavaScript для airbnb с большим количеством звезд (~ 57,5 ​​тыс. На данный момент) и руководства об акронимах, в которых говорится:

Акронимы и инициалы всегда должны быть заглавными или строчными.

Почему? Имена предназначены для удобочитаемости, а не для успокоения компьютерного алгоритма.

// bad
import SmsContainer from './containers/SmsContainer';

// bad
const HttpRequests = [
  // ...
];

// good
import SMSContainer from './containers/SMSContainer';

// good
const HTTPRequests = [
  // ...
];

// also good
const httpRequests = [
  // ...
];

// best
import TextMessageContainer from './containers/TextMessageContainer';

// best
const requests = [
  // ...
];
person valex    schedule 24.08.2017
comment
Почему? Имена предназначены для удобочитаемости, а не для успокоения компьютерного алгоритма, поэтому XMLHTTPRequest читается лучше, чем XmlHttpRequest, верно? - person L. Holanda; 13.09.2018
comment
Не имеет смысла, почему httpRequests считается хорошим, а HttpRequests - плохим. следуя этому принципу, тогда для XML HTTP Request должно быть _3 _ ??? - person L. Holanda; 13.09.2018
comment
Я часто цитирую руководство по стилю AirBnb, но в данном случае не согласен. Я особенно не согласен с их утверждением: аббревиатуры и инициалы всегда должны быть либо в верхнем, либо в нижнем регистре. xmlHttpRequest, на мой взгляд, более читабелен, чем XMLHTTPRequest. - person RonanCodes; 26.02.2020
comment
Что вы думаете о «LASER», «RADAR», SCUBA? Это были аббревиатуры, но в настоящее время они широко используются как обычные слова. - person chen3feng; 17.11.2020
comment
Когда вы используете аббревиатуру с заглавной буквы, вы в основном превращаете ее в слово, что я не считаю правильным. Акронимы должны быть либо в верхнем, либо в нижнем регистре. - person Temperosa; 02.01.2021

В настоящее время я использую следующие правила:

  1. Заглавные буквы для аббревиатур: XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

  2. Верблюжий регистр для сокращений: ID[entifier], Exe[cutable], App[lication].

ID - исключение, извините, но это правда.

Когда я вижу заглавную букву, я подразумеваю аббревиатуру, то есть отдельное слово для каждой буквы. В сокращениях нет отдельных слов для каждой буквы, поэтому я использую верблюжий регистр.

XMLHTTPRequest неоднозначно, но это редкий случай и не настолько неоднозначно, так что все в порядке, правила и логика важнее красоты.

person user2992258    schedule 12.07.2017

В дополнение к тому, что сказал @valex, я хочу резюмировать пару вещей с данными ответами на этот вопрос.

Я думаю, что общий ответ таков: это зависит от языка программирования, который вы используете.

C Sharp

Microsoft написала некоторые рекомендации, в которых кажется, что HtmlButton - правильный способ назвать класс для этого случая.

JavaScript

В Javascript есть несколько глобальных переменных с акронимами, и он использует их все в верхнем регистре (но, как ни странно, не всегда последовательно), вот несколько примеров:

encodeURIComponent XMLHttpRequest toJSON toISOString

person lante    schedule 16.03.2018
comment
Ну, это старый Netscape, у него даже есть некоторые без camelCase, такие как onerror. - person Eddie; 04.04.2018

Об этом немного говорится в руководстве по стилю JavaScript Airbnb . В основном:

// bad
const HttpRequests = [ req ];

// good
const httpRequests = [ req ];

// also good
const HTTPRequests = [ req ];

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

person Bryantee    schedule 01.02.2018

отказ от ответственности: английский не мой тон матери. Но я долго думал об этой проблеме, особенно при использовании node (стиль camelcase) для обработки базы данных, так как имя полей таблицы должно быть змеевидным, это моя мысль:

Для программиста существует два вида сокращений:

  • на естественном языке, ЮНЕСКО
  • в языке компьютерного программирования, например, tmc and textMessageContainer, который обычно отображается как локальная переменная.

В мире программирования все аббревиатуры в естественном языке следует рассматривать как слово по следующим причинам:

  1. когда мы программируем, мы должны называть переменную либо в стиле аббревиатуры, либо в стиле аббревиатуры. Итак, если мы назовем функцию getUNESCOProperties, это означает, что ЮНЕСКО является аббревиатурой (в противном случае она не должна состоять только из прописных букв), но, очевидно, get и properties не являются аббревиатурами. поэтому мы должны назвать эту функцию либо gunescop, либо getUnitedNationsEducationalScientificAndCulturalOrganizationProperties, оба недопустимы.

  2. естественный язык постоянно развивается, и сегодняшние сокращения станут словами завтра, но программы должны быть независимыми от этого тренда и стоять вечно.

кстати, в ответе, получившем наибольшее количество голосов, IO - это аббревиатура на компьютерном языке, означающая (расшифровывается как InputOutput), но мне не нравится это имя, поскольку я думаю, что аббревиатуру (на компьютерном языке) следует использовать только для имени локальная переменная, но класс / функция верхнего уровня, поэтому вместо ввода-вывода следует использовать InputOutput.

person xiechao06    schedule 23.05.2018
comment
язык, а не тон - person Dan Dascalescu; 30.03.2020

ЮНЕСКО - это особый случай, поскольку его обычно (на английском языке) читают как слово, а не аббревиатуру - например, UEFA, RADA, BAFTA и в отличие от BBC, HTML, SSL.

person user1833431    schedule 16.07.2016
comment
Это различие между акронимами и простыми аббревиатурами; это различие, казалось бы, имеет отношение ко всей дискуссии, но в представленных ответах оно почти полностью опущено. - person simon; 31.10.2016
comment
BBC, HTML, SSL и другие аббревиатуры, в которых вы озвучиваете каждую букву, более точно называют инициализмами. Такие слова, как ЮНЕСКО, произносимые как слово, являются настоящими аббревиатурами. - person Lrdwhyt; 31.01.2020

Существует также другое соглашение о верблюжьем регистре, которое пытается улучшить читаемость сокращений, используя либо верхний регистр (HTML), либо нижний регистр (html), но избегая того и другого (Html).

Итак, в вашем случае вы можете написать getUNESCOProperties. Вы также можете написать unescoProperties для переменной или UNESCOProperties для класса (по соглашению классы должны начинаться с верхнего регистра).

Это правило усложняется, если вы хотите объединить два акронима, например, для класса с именем XML HTTP Request. Он должен начинаться с верхнего регистра, но поскольку XMLHTTPRequest будет нелегко читать (это XMLH TTP Request?), А XMLhttpRequest нарушит соглашение о верблюжьем регистре (это XM Lhttp Request?), Лучшим вариантом было бы смешать регистр: XMLHttpRequest , что фактически и использовалось W3C. Однако использование такого рода наименований не рекомендуется. Для этого примера лучше использовать имя HTTPRequest.

Поскольку официальное английское слово для обозначения идентификации / идентификации выглядит как ID, хотя и не является аббревиатурой, вы можете применить там те же правила.

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

person Jesús Carrera    schedule 12.05.2016
comment
Я не верю всей этой теме :-) Значит, это будет XMLToHtmlConverter, но HTMLToXmlConverter? Ух ты... - person Josef Sábl; 03.06.2016
comment
@ JosefSábl, да, именно так. Что касается вашего отрицательного голоса, я не говорю, что мне нравится эта конвенция, но она определенно существует. - person Jesús Carrera; 03.06.2016
comment
Я прочитал вопрос о том, что такое хорошее соглашение для написания акронимов в верблюжьем регистре. Не можете ли вы перечислить все существующие соглашения. И поскольку я считаю упомянутую вами конвенцию очень плохой, я проголосовал против :-) - person Josef Sábl; 04.07.2016
comment
Вопрос в том, правильно ли писать так? И поскольку есть много правильных способов написать это, потому что это просто соглашение, и это соглашение довольно популярно (независимо от того, как вы его считаете), мой ответ очень верен :-) - person Jesús Carrera; 04.07.2016