Camel Case (иногда стилизованный автологически как camelCase или CamelCase , также известный как camel caps или более формально как medial capitals ) — это практика написания фраз без пробелов или знаков препинания и с заглавными буквами. Формат указывает, что первое слово начинается с любой из букв, а затем следующие слова имеют начальную заглавную букву. Распространенные примеры включают YouTube , [1] PowerPoint , HarperCollins , FedEx , iPhone , eBay , [2] и LaGuardia . [3] Camel Case часто используется в качестве соглашения об именах в компьютерном программировании. Он также иногда используется в именах пользователей в Интернете, таких как JohnSmith , и для того, чтобы сделать многословные доменные имена более разборчивыми, например, при продвижении EasyWidgetCompany.com . Фактически, WikiWikiWeb , предок Wikipedia, написан в camel case.
Более конкретные термины Pascal case и верхний camel case относятся к объединенной фразе, где первая буква каждого слова пишется заглавной, включая начальную букву первого слова. Аналогично, нижний camel case (также известный как дромадерный case ) требует начальной строчной буквы. Некоторые люди и организации, в частности Microsoft , используют термин camel case только для нижнего camel case, обозначая Pascal case для верхнего camel case. [4] Некоторые стили программирования предпочитают camel case с первой буквой заглавной, другие — нет. [5] [4] [6] Для ясности эта статья оставляет определение camel case неоднозначным в отношении заглавных букв и использует более конкретные термины при необходимости.
Camel case отличается от нескольких других стилей: title case , который пишет все слова заглавными буквами, но сохраняет пробелы между ними; Tall Man lettering , который использует заглавные буквы, чтобы подчеркнуть различия между похожими названиями продуктов, такими как predniSONE и predniSOLONE ; и snake case , который использует подчеркивания, перемежаемые строчными буквами (иногда с первой заглавной буквой). Сочетание snake и camel case (идентификаторы Written_Like_This ) рекомендуется в руководстве по стилю Ada 95. [7]
Эта практика имеет разные названия, в том числе:
Самое раннее известное появление термина «InterCaps» в Usenet относится к посту alt.folklore.computersАви Раппопорта в группе в апреле 1990 года. [22] Самое раннее использование названия «Camel Case» относится к 1995 году в посте Ньютона Лава. [23] С тех пор Лав сказал: «С появлением языков программирования, имеющих такие конструкции, горбатость стиля заставила меня сначала назвать его HumpyCase, прежде чем я остановился на CamelCase. Я называл его CamelCase в течение многих лет. ... Цитата выше была просто первым случаем, когда я использовал это название в USENET». [24]
Использование средних заглавных букв в качестве условности в обычном написании повседневных текстов встречается редко, но применяется в некоторых языках как решение особых проблем, возникающих при объединении двух слов или сегментов.
В итальянском языке местоимения могут присоединяться к глаголам, и поскольку почетная форма местоимений второго лица пишется с заглавной буквы, это может привести к предложению типа non ho trovato il tempo di risponderLe («У меня не было времени ответить вам» – где Le означает «вам»).
В немецком языке средняя заглавная буква I , называемая Binnen-I , иногда используется в слове типа StudentInnen («студенты»), чтобы указать, что Studenten («студенты мужского пола») и Studentinnen («студентки женского пола») подразумеваются одновременно. Однако заглавные буквы в середине слова не соответствуют немецкой орфографии, за исключением имен собственных, таких как McDonald ; предыдущий пример можно было бы правильно написать с использованием скобок как Student(inn)en , аналогично «congress(wo)men» в английском языке. [25]
В ирландском языке верблюжий падеж используется, когда к имени собственному присоединяется словоизменительный префикс, например i nGaillimh («в Голуэе »), от Gaillimh («Голуэй»); ан tAlbanach («шотландец»), от Albanach («шотландец»); и отправляйтесь в hÉirinn («в Ирландию»), из Éire («Ирландия»). В современной шотландской гэльской орфографии был вставлен дефис: t-Albannach .
Это соглашение также используется в нескольких письменных языках банту (например, isiZulu , « язык зулу ») и нескольких языках коренных народов Мексики (например, науатль , тотонакан , миксе-зоке и некоторые языки Ото-Манге ).
В голландском языке при написании заглавного диграфа ij обе буквы I и J пишутся с заглавной буквы, например, в названии страны IJsland («Исландия»).
В китайском пиньине иногда используется camel case для названий мест, чтобы читатели могли легче различать разные части названия. Например, такие места, как Beijing (北京), Qinhuangdao (秦皇岛) и Daxing'anling (大兴安岭) могут быть записаны как BeiJing , QinHuangDao и DaXingAnLing соответственно , с количеством заглавных букв, равным количеству китайских иероглифов . Написание составных слов только начальной буквой каждого иероглифа также приемлемо в некоторых случаях, поэтому Beijing может быть записано как BJ , Qinghuangdao как QHD, а Daxing'anling как DXAL.
В английском языке средние заглавные буквы обычно встречаются только в шотландских или ирландских именах «Mac-» или «Mc-», где, например, MacDonald, McDonald и Macdonald являются распространенными вариантами написания одного и того же имени, а также в англо-нормандских именах «Fitz-», где, например, встречаются как FitzGerald , так и Fitzgerald .
В своем руководстве по английскому стилю The King's English , впервые опубликованном в 1906 году, HW и FG Fowler предположили, что средние заглавные буквы могут использоваться в тройных сложных словах , где дефисы могут вызвать двусмысленность — примеры, которые они приводят, — KingMark-like (в отличие от KingMark-like ) и Anglo-SouthAmerican (в отличие от Anglo-SouthAmerican ). Однако они описали систему как «слишком безнадежно противоположную использованию в настоящее время». [26]
В научной транслитерации языков, написанных другими шрифтами , средние заглавные буквы используются в похожих ситуациях. Например, в транслитерированном иврите haIvri означает «еврейский человек» или «еврей», а b'Yerushalayim означает «в Иерусалиме». В тибетских собственных именах, таких как rLobsang , «r» обозначает префиксный глиф в оригинальном шрифте, который выполняет функцию маркера тона , а не обычной буквы. Другой пример — ts I urku , латинская транскрипция чеченского термина для завершающего камня характерных средневековых оборонительных башен Чечни и Ингушетии ; буква « I » ( палочка ) на самом деле не является заглавной, обозначая фонему, отличную от той, которая транскрибируется как «i».
Прописные буквы традиционно используются в сокращениях, чтобы отразить заглавные буквы, которые будут у слов, написанных полностью, например, в академических званиях PhD или BSc . Более недавний пример — NaNoWriMo , сокращение от National Novel Writing Month и обозначение как ежегодного мероприятия, так и некоммерческой организации, которая его проводит. В немецком языке названия законов сокращаются с использованием встроенных заглавных букв, например, StGB для Strafgesetzbuch (Уголовный кодекс), PatG для Patentgesetz (Закон о патентах), BVerfG для Bundesverfassungsgericht ( Федеральный конституционный суд ) или очень распространенное GmbH для Gesellschaft mit beschränkter Haftung ( частная компания с ограниченной ответственностью ). В этом контексте может быть даже три или более заглавных букв в camel case, например, в TzBfG для Teilzeit- und Befristungsgesetz (Закон о неполном рабочем дне и ограниченном по времени трудоустройстве). Во французском языке сокращения camel case, такие как OuLiPo (1960), были предпочтительны в течение некоторого времени в качестве альтернативы инициализмам.
CamelCase часто используется для транслитерации инициалов в алфавиты, где для представления одного символа исходного алфавита могут потребоваться две буквы, например, DShK из кириллицы ДШК.
Первое систематическое и широко распространенное использование средних заглавных букв в технических целях было обозначением химических формул, изобретенных шведским химиком Якобом Берцелиусом в 1813 году. Чтобы заменить множество соглашений об именах и символах, использовавшихся химиками до того времени, он предложил обозначать каждый химический элемент символом из одной или двух букв, первая из которых была заглавной. Заглавные буквы позволяли записывать формулы типа « NaCl » без пробелов и при этом их можно было бы анализировать без двусмысленности. [27] [28]
Система Берцелиуса продолжает использоваться, дополненная трехбуквенными символами, такими как « Uue » для неподтвержденных или неизвестных элементов и сокращениями для некоторых распространенных заместителей (особенно в области органической химии, например, « Et » для «этил-»). Она была расширена для описания аминокислотных последовательностей белков и других подобных доменов.
С начала 20-го века средние заглавные буквы иногда использовались в названиях компаний и товарных знаков, например:
В 1970-х и 1980-х годах средние заглавные буквы были приняты в качестве стандартного или альтернативного соглашения об именовании для идентификаторов из нескольких слов в нескольких языках программирования . Точное происхождение соглашения в компьютерном программировании до сих пор не установлено. В трудах конференции 1954 года [32] система Speedcoding IBM иногда неофициально упоминалась как «SpeedCo». В статье Кристофера Стрейчи о GPM (1965) [33] показана программа, которая включает некоторые идентификаторы средних заглавных букв, включая « » и « » (скорее всего, это было влияние языка CPL , одним из разработчиков которого был Стрейчи)NextCh
WriteSymbol
Многословные описательные идентификаторы со встроенными пробелами, такие как end of file
или char table
не могут использоваться в большинстве языков программирования, поскольку пробелы между словами будут интерпретироваться как разделители между токенами . Альтернатива объединения слов, как в endoffile
или , chartable
сложна для понимания и может ввести в заблуждение; например, chartable
является английским словом (можно нанести на карту), тогда как charTable
означает таблицу chars
.
Некоторые ранние языки программирования, в частности Lisp (1958) и COBOL (1959), решили эту проблему, разрешив использовать дефис ("-") между словами составных идентификаторов, как в "END-OF-FILE": Lisp, потому что он хорошо работал с префиксной нотацией (анализатор Lisp не обрабатывал дефис в середине символа как оператор вычитания), а COBOL, потому что его операторы были отдельными английскими словами. Это соглашение по-прежнему используется в этих языках, а также распространено в именах программ, вводимых в командной строке , как в Unix.
Однако это решение не было адекватным для математически ориентированных языков, таких как FORTRAN (1955) и ALGOL (1958), которые использовали дефис в качестве инфиксного оператора вычитания. FORTRAN вообще игнорировал пробелы, поэтому программисты могли использовать встроенные пробелы в именах переменных. Однако эта функция была не очень полезной, поскольку ранние версии языка ограничивали идентификаторы не более чем шестью символами.
Усугубляя проблему, распространенные наборы символов перфокарт того времени состояли только из заглавных букв и не имели других специальных символов. Только в конце 1960-х годов широкое принятие набора символов ASCII сделало как строчные буквы, так и символ подчеркивания_
общедоступными. Некоторые языки, в частности C , быстро приняли подчеркивания в качестве разделителей слов и идентификаторов, которые end_of_file
до сих пор распространены в программах и библиотеках на языке C (а также в более поздних языках, на которые оказал влияние C, таких как Perl и Python ). Однако некоторые языки и программисты решили избегать подчеркиваний и вместо этого приняли camel case.
Чарльз Симони , работавший в Xerox PARC в 1970-х годах и позже руководивший созданием пакета приложений Microsoft Office, изобрел и обучил использованию венгерской нотации , одна из версий которой использует строчные буквы в начале (заглавных) имени переменной для обозначения ее типа. Один из источников [ требуется ссылка ] утверждает, что стиль camel case впервые стал популярен в Xerox PARC около 1978 года, когда для компьютера Xerox Alto был разработан язык программирования Mesa . В этой машине отсутствовала клавиша подчеркивания (ее место занимала левая стрелка «←»), а символы дефиса и пробела не допускались в идентификаторах, что делало camel case единственной жизнеспособной схемой для читаемых многословных имен. Руководство по языку PARC Mesa (1979) включало стандарт кодирования с конкретными правилами для верхнего и нижнего camel case, которому строго следовали библиотеки Mesa и операционная система Alto. Никлаус Вирт , изобретатель языка Паскаль , во время своего творческого отпуска в PARC оценил верблюжий регистр и использовал его в Modula , своем следующем языке программирования. [34]
Язык Smalltalk , изначально разработанный на Alto, также использует camelcase вместо подчеркиваний. Этот язык стал довольно популярным в начале 1980-х годов и, таким образом, также мог сыграть важную роль в распространении стиля за пределами PARC.
Верхний camel case (или "Pascal case") используется в Wolfram Language в компьютерной алгебраической системе Mathematica для предопределенных идентификаторов. Определенные пользователем идентификаторы должны начинаться со строчной буквы. Это позволяет избежать конфликта между предопределенными и определенными пользователем идентификаторами как сегодня, так и во всех будущих версиях.
Имена переменных C# рекомендуется давать в соответствии с соглашением о нижнем регистре. [35]
Независимо от своего происхождения в области вычислительной техники, эта традиция использовалась в названиях компьютерных компаний и их коммерческих брендов с конца 1970-х годов — тенденция, которая сохраняется и по сей день:
В 1980-х и 1990-х годах, после того как появление персональных компьютеров открыло миру хакерскую культуру, camel case стал модным для корпоративных торговых наименований и в некомпьютерных областях. Основное использование прочно устоялось к 1990 году:
Во время пузыря доткомов в конце 1990-х годов строчные префиксы «e» (для « электронный ») и «i» (для «Интернет», [36] «информация», « интеллектуальный » и т. д.) стали довольно распространенными, что привело к появлению таких названий, как iMac от Apple и программная платформа eBox .
В 1998 году Дэйв Йост предложил химикам использовать заглавные буквы в середине для облегчения чтения длинных химических названий, например, писать Амидофосфорибозилтрансфераза вместо амидофосфорибозилтрансфераза . [37] Такое использование не получило широкого распространения.
Camel case иногда используется для сокращенных названий некоторых районов, например, районов Нью-Йорка SoHo ( к югу от Хьюстон -стрит) и TriBeCa ( к югу от Канал - стрит) и SoMa в Сан-Франциско ( к югу от Маркета ). Такие использования быстро исчезают, поэтому теперь районы обычно обозначаются как Soho , Tribeca и Soma .
Внутренняя заглавная буква также использовалась для других технических кодов, таких как HeLa (1983).
Использование средних заглавных букв для составных идентификаторов рекомендуется руководствами по стилю кодирования многих организаций или программных проектов. Для некоторых языков (таких как Mesa , Pascal , Modula , Java и Microsoft .NET ) эта практика рекомендуется разработчиками языка или авторитетными руководствами и поэтому стала частью «культуры» языка.
В руководствах по стилю часто различают верхний и нижний регистр, обычно указывая, какой вариант следует использовать для определенных видов сущностей: переменных , полей записей , методов , процедур , функций , подпрограмм , типов и т. д. Эти правила иногда поддерживаются инструментами статического анализа , которые проверяют исходный код на соответствие.
Например, в оригинальной венгерской нотации программирования указано, что аббревиатура со строчными буквами для «типа использования» (не типа данных) должна предварять все имена переменных, а остальная часть имени должна быть написана заглавными буквами «верблюжьего регистра»; таким образом, это форма нижнего «верблюжьего регистра».
Программные идентификаторы часто должны содержать аббревиатуры и инициализации , которые уже указаны в верхнем регистре, например, «old HTML file». По аналогии с правилами регистра заголовков, естественный рендеринг camel case будет иметь аббревиатуру полностью в верхнем регистре, а именно «oldHTMLFile». Однако этот подход проблематичен, когда два акронима встречаются вместе (например, «parse DBM XML» станет «parseDBMXML») или когда стандарт предписывает нижний camel case, но имя начинается с аббревиатуры (например, «SQL server» станет «sQLServer»). По этой причине некоторые программисты предпочитают обрабатывать аббревиатуры так, как если бы они были словами, и писать «oldHtmlFile», «parseDbmXml» или «sqlServer». [38] Однако это может затруднить распознавание того, что данное слово задумано как аббревиатура. [39]
Трудности возникают, когда идентификаторы имеют разное значение в зависимости только от регистра, как это может произойти с математическими функциями или товарными знаками. В этой ситуации изменение регистра идентификатора может быть невозможным, и необходимо выбрать альтернативное имя.
Camelcase используется в некоторых языках разметки вики для терминов, которые должны автоматически ссылаться на другие страницы вики . Это соглашение изначально использовалось в оригинальном программном обеспечении вики Уорда Каннингема , WikiWikiWeb , [40] и может быть активировано в большинстве других вики. Некоторые вики-движки, такие как TiddlyWiki , Trac и PmWiki, используют его в настройках по умолчанию, но обычно также предоставляют механизм конфигурации или плагин для его отключения. Википедия ранее также использовала ссылки в camelcase, но перешла на явную разметку ссылок с использованием квадратных скобок [41], и многие другие сайты вики сделали то же самое. Например, MediaWiki не поддерживает camelcase для ссылок. Некоторые вики, которые не используют ссылки в camelcase, могут по-прежнему использовать camelcase в качестве соглашения об именовании, например, AboutUs .
Реестр NIEM требует, чтобы элементы данных XML использовали верхний регистр, а атрибуты XML использовали нижний регистр.
Большинство популярных интерфейсов командной строки и скриптовых языков не могут легко обрабатывать имена файлов, содержащие встроенные пробелы (обычно требуя, чтобы имя было заключено в кавычки). Поэтому пользователи этих систем часто прибегают к camelcase (или подчеркиваниям, дефисам и другим «безопасным» символам) для составных имен файлов, таких как MyJobResume.pdf .
Микроблоги и социальные сети, ограничивающие количество символов в сообщении, являются потенциальными площадками для средних заглавных букв. Использование camelCase между словами уменьшает количество пробелов и, следовательно, количество символов в данном сообщении, позволяя большему количеству контента уместиться в ограниченном пространстве. Хэштеги , особенно длинные, часто используют camelCase для поддержания читабельности (например, #CollegeStudentProblems легче читать, чем #collegestudentproblems); [42] эта практика улучшает доступность , поскольку программы чтения с экрана распознают CamelCase при разборе составных хэштегов. [43]
В URL-адресах веб-сайтов пробелы кодируются процентами как "%20", что делает адрес длиннее и менее удобным для восприятия человеком . При отсутствии пробелов camel case не имеет этой проблемы.
Camel Case подвергался критике за то, что он негативно влияет на читаемость из-за удаления пробелов и заглавных букв в каждом слове. [44]
Исследование 2009 года 135 субъектов, сравнивающих змеиный регистр (идентификаторы с подчеркиванием) с верблюжьим регистром, показало, что идентификаторы верблюжьего регистра распознавались с более высокой точностью среди всех субъектов. Испытуемые распознавали идентификаторы змеиного регистра быстрее, чем идентификаторы верблюжьего регистра. Обучение верблюжьему регистру ускорило распознавание верблюжьего регистра и замедлило распознавание змеиного регистра, хотя этот эффект включал коэффициенты с высокими p-значениями . Исследование также провело субъективный опрос и обнаружило, что непрограммисты либо предпочитали подчеркивания, либо не имели никаких предпочтений, а 38% программистов, обученных верблюжьему регистру, заявили о предпочтении подчеркиваний. Однако эти предпочтения не имели статистической корреляции с точностью или скоростью при контроле других переменных. [45]
В последующем исследовании 2010 года использовался аналогичный дизайн исследования с 15 субъектами, состоящими из опытных программистов, обученных в основном в случае змеи. Он использовал статический, а не анимированный стимул и обнаружил идеальную точность в обоих стилях, за исключением одного неправильного ответа в случае верблюда. Испытуемые распознавали идентификаторы в случае змеи быстрее, чем в случае верблюда. В исследовании использовалось оборудование для отслеживания глаз и было обнаружено, что разница в скорости для его субъектов была в первую очередь связана с тем фактом, что средняя продолжительность фиксаций для случая верблюда была значительно выше, чем для случая змеи для идентификаторов из 3 частей. Опрос зафиксировал смесь предпочтительных стилей идентификаторов, но снова не было никакой корреляции предпочтительного стиля с точностью или скоростью. [46]
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )Что касается идентификаторов в стиле CamelCase, это оказывает большее влияние на идентификаторы, включающие короткие слова и особенно аббревиатуры. Например, рассмотрим идентификатор аббревиатуры, найденный в идентификаторе kIOuterIIDPath. Из-за набора заглавных букв задача чтения kIOuterIIDPath, в частности идентификация слова ID, становится более сложной.
Эксперимент основан на предыдущих работах других исследователей, изучающих, как читатели естественного языка выполняют такие задачи. Результаты показывают, что Camel Caseing приводит к более высокой точности среди всех испытуемых независимо от обучения, а обученные Camel Caseing способны распознавать идентификаторы в Camel Caseing быстрее, чем идентификаторы в стиле подчеркивания.
Представлено эмпирическое исследование для определения того, влияют ли соглашения об именовании идентификаторов (например, camelCase и under_score) на понимание кода. Для сбора количественных данных от людей во время эксперимента используется устройство отслеживания глаз. Целью данного исследования является повторение предыдущего исследования, опубликованного на ICPC 2009 (Бинкли и др.), в котором для получения данных использовался метод теста на определение времени ответа. Использование оборудования для отслеживания глаз дает дополнительную информацию и преодолевает некоторые ограничения традиционных методов сбора данных. Обсуждаются сходства и различия между двумя исследованиями. Одно из главных отличий заключается в том, что испытуемые обучались в основном стилю подчеркивания и все были программистами. Хотя результаты не указывают на разницу в точности между двумя стилями, испытуемые распознают идентификаторы в стиле подчеркивания быстрее.