Акроними в CamelCase [затворено]

Имам съмнения относно CamelCase. Да предположим, че имате този акроним: Unesco = United Nations Educational, Scientific and Cultural Organization.

Трябва да напишете: unitedNationsEducationalScientificAndCulturalOrganization

Но какво ще стане, ако трябва да напишете акронима? Нещо като:

getUnescoProperties();

Правилно ли е да го напиша по този начин? getUnescoProperties() ИЛИ getUNESCOProperties();


person gal007    schedule 20.03.2013    source източник
comment
Това не трябва ли да е на programmers.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 са:

Когато използвате акроними, използвайте малки и големи букви Pascal или camel за съкращения с дължина повече от два знака. Например използвайте 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
@Yar, бях саркастичен. Трябваше да бъда по-ясен какво е намерението ми, като имах усмивка :-). - person Makyen♦; 10.08.2016
comment
Съгласете се, че не трябва да има изключение за двубуквени акроними. Вижте клас DbContext. Изглежда по-добре от DBContext. - person Rustem Zinnatullin; 21.03.2019
comment
@jasonscript Откога Id е акроним? Това е съкратено от идентификатор, така че IMO вече сте прави с Id срещу ID. Последното е грешно. :) - 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
Какво ще кажете за съкращенията от 1 буква? - person jbyrd; 05.03.2020
comment
Съкращаването на думите идентификатор, самоличност, идентификация и т.н. като ID с главна буква D (и, по-лошо, произнасянето му /eye-dee/) е очевидно погрешно и силно досадно. Предполагам, че хората са се объркали със съкращението за документ за самоличност или друга многословна фраза, или американския щат Айдахо (но почти сигурно не Идентификационни данни, @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).

Така че ще публикувам този отговор като алтернатива на приетия отговор. Всички акроними трябва да се третират последователно; акронимите трябва да се третират като всяка друга дума. Цитиране на Уикипедия:

...някои програмисти предпочитат да третират съкращенията като думи с малки букви...

Така че отново: въпросът на OP, съгласен съм с приетия отговор; това е правилно: getUnescoProperties()

Но мисля, че ще стигна до различно заключение в тези примери:

  • US TaxesusTaxes
  • Player IDplayerId

Така че гласувайте за този отговор, ако смятате, че двубуквените акроними трябва да се третират като другите акроними.

Camel Case е конвенция, а не спецификация. Така че предполагам правилата на популярното мнение.

( РЕДАКТИРАНЕ: Премахване на това предложение, че гласовете трябва да решават този въпрос; както казва @Brian David; Stack Overflow не е „състезание за популярност“ и този въпрос беше затворен като „базиран на мнение“)

Въпреки че мнозина предпочитат да третират акронимите като всяка друга дума, по-често срещаната практика може да е да се поставят акроними с главни букви (въпреки че това води до „мерзости“)

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

  • Имайте предвид, че някои хора правят разлика между съкращение и акроними
  • Забележка Указанията на Microsoft правят разлика между акроними с два знака и „акроними с повече от два знака“
  • Обърнете внимание, че някои хора препоръчват да се избягват напълно съкращенията/акронимите
  • Имайте предвид, че някои хора препоръчват да избягвате напълно CamelCase / PascalCase
  • Обърнете внимание, че някои хора правят разлика между „последователност“ като „правила, които изглеждат вътрешно непоследователни“ (т.е. третиране на акроними с два знака по различен начин от акроними с три знака); някои хора определят „последователност“ като „последователно прилагане на едно и също правило“ (дори ако правилото е вътрешно непоследователно)
  • Указания за проектиране на рамка
  • Указания на Microsoft
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
Причината, поради която Cwalina et al избраха да третират двузнаковите акроними по различен начин, беше основно да се избегне объркване. Вземете данъците в САЩ като пример: TransferUSTaxes() срещу TransferUsTaxes(). Или като използвате пример, даден в Указания за проектиране на рамка, closeIOStream срещу closeIoStream. Съкращенията не се препоръчват. Единствените две изключения са ok и id. - person Frederik Krautwald; 27.05.2015
comment
Благодаря за цитирането на Cwalina; Не разбрах връзката на Microsoft, която цитирах, извадка от Framework Design Насоки . Връзката на Microsoft не обяснява защо двубуквите са изключение. Примерът, който дават е IO. Няма дума Io, за която да знам. И съм двусмислен относно съветите му, насърчаващи използването на акроними, дори и добре известни - person The Red Pea; 28.05.2015
comment
Io, съществително, множествено число ios: малък ястреб, Buteo solitarius. Io , съществително: 1) Класическа митология. жена, обичана от Зевс, идентифицирана от египтяните с Изида. 2) Астрономия. голяма вулканично активна луна на планетата Юпитер. Йо, Символ, Химия: йоний. Йо.: Айова. I/O: 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) срещу InIn(item) (подсказка: IN е инч(ове)). Или IDById(id) срещу IdById(id), наука за контекста (подсказка: ID означава инфекциозно заболяване). Дълги два знака - какво в кой контекст? - person Frederik Krautwald; 29.05.2015
comment
На връзката на Microsoft ... използвайте Cascal или Camel case за акроними повече от два знака. ...Въпреки това трябва да изписвате с главни букви акроними, които се състоят от само два знака... Това е частта, която бих нарекъл непоследователна. По-доброто характеризиране е изключение. И поне сте рационализирали защо съкращенията с две букви могат да бъдат по-голямо объркване. Но предполагам, че тези програми с CanCan просто нямат късмет; двусмислено дали е танцовото движение или мрежата на общността на Cercle de l'Aviron de Nantes :) - person The Red Pea; 29.05.2015
comment
Да, това указание за двузнаков акроним е еквивалентно на Указанията за дизайн на рамката. Последователността означава последователно следване на указанията, включително изключения от указанията. Предполагам, че IO елиминира, че се говори за грешка при писане: той имаше предвид In? - person Frederik Krautwald; 29.05.2015
comment
Авторът на Наказателно престъпление: Как да боравим със съкращенията в 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 case на 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.

Обикновено в OO програмирането променливите трябва да започват с малка буква (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 (shell) или HTTP + SSH? Конвенцията на Google определено е по-малко двусмислена. - person L. Holanda; 21.06.2019

Има airbnb JavaScript Style Guide в github с много звезди (~57,5k към този момент) и ръководства относно акроними, които казват:

Акронимите и инициализите трябва винаги да са с главни букви или с малки букви.

Защо? Имената са за четливост, а не за успокояване на компютърен алгоритъм.

// 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 заявка трябва да бъде xmlhttpRequest??? - person L. Holanda; 13.09.2018
comment
Често цитирам ръководството за стил на AirBnb, но в този случай не съм съгласен. Особено не съм съгласен с тяхното твърдение: Акронимите и инициализите винаги трябва да бъдат изцяло с главни или с малки букви.. xmlHttpRequest е по-четлив от XMLHTTPRequest според мен. - person RonanCodes; 26.02.2020
comment
Какво мислите за „ЛАЗЕР“, „РАДАР“, СКУБА? Бяха акроними, но в наши дни масово се смятат за нормални думи. - person chen3feng; 17.11.2020
comment
Когато използвате акроним с главни букви, вие основно го трансформирате в дума сама по себе си, което не мисля, че е правилно. Всички акроними трябва да са или с главни, или с малки букви. - person Temperosa; 02.01.2021

В момента използвам следните правила:

  1. Главна буква за акроними: XMLHTTPRequest, xmlHTTPRequest, requestIPAddress.

  2. Camel case за съкращения: 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

отказ от отговорност: английският не е моят майчин тон. Но аз съм мислил за този проблем от дълго време, особено когато използвам възел (стил Camelcase) за обработка на база данни, тъй като името на полетата на таблицата трябва да бъде змийско, това е моята мисъл:

Има 2 вида „акроними“ за програмист:

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

В света на програмирането всички акроними на естествения език трябва да се третират като дума, причините са:

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

  2. естественият език се развива непрекъснато и днешните акроними ще станат думи утре, но програмите трябва да са независими от тази тенденция и да стоят вечно.

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

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 заявка. Ще започне с главни букви, но тъй като XMLHTTPRequest няма да е лесен за четене (дали е XMLH TTP заявка?), а XMLhttpRequest ще наруши конвенцията за Camelcase (дали е XM Lhttp заявка?), най-добрият вариант би бил смесването на малки и големи букви: 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