Как написать случай верблюда для таких слов, как «номер телефона», «мотоцикл», «длина волны» и т. Д.

75

У меня проблема с пониманием того, как применить синтаксис camelCase к некоторым именам моих переменных.

Например, как правильно написать слово типа «номер телефона» в случае верблюда? Это phoneNumberили phonenumber? Аналогично с именем пользователя, это usernameили userName?

Я думаю , что это выглядит не так с верблюда случае , как motorCycle, passWord, sunDay, setUpили , waveLengthпоскольку это только одно слово каждый. Я думаю, что это может быть причиной того, что он называется, hashMapно также и hashtableв случае верблюда без заглавной буквы в последнем случае, потому что хеш-таблица - это одно слово, а хэш-карта - два слова.

Но если у мотоцикла есть цвет, то будет ли это motorcycleColorтак, как слово соединено? Это правильно или же она должна быть phoneNUmber, waveLength, sunBlockи даже sunDayв воскресенье недели?

Почему, например, метод вызывается, getISOCountriesкогда он говорит, HttpHeadersнапример, неясно, что становится строчными, если у нас есть метод, подобный String camelCaseString = dog.toCamelCase()или interface CamelCase.

Связанный: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces

Никлас Розенкранц
источник
7
В тех случаях, когда вам действительно трудно определить, является ли фраза из двух слов составным словом, выберите заглавную букву и придерживайтесь ее. Как и в большинстве соглашений о кодировании, важнее всего быть согласованным в рамках одного проекта.
Кевин
2
Отличный вопрос, я всегда задавался вопросом, как написать «fileName» (и неправильное «имя файла»). Я думаю, что это слово написано по-разному от программиста к программисту ...
Рэй
3
@PacMani Вам может понравиться обсуждение здесь !
Джейсон С
4
@ 909Niklas Я бы отбросил «имя» как можно больше. Просто используйте «улицу». Если это строка, это имя, если это не вредно или не сбивает с толку. usernameэто то, что это, это позывной, а не «имя пользователя», так что это больше похоже на мотоцикл, чем firstName или lastName (которые должны быть на верблюде)
Питер Тернер
2
@PeterTurner Некоторые программисты говорят, что это streetдолжен быть класс и nameодин из его атрибутов / членов данных.
JAB

Ответы:

173

Вы должны использовать заглавную букву после того, где «обычно» будет пробел (когда вы будете писать письмо вместо исходного кода). Ваше первое предположение верно:

  • Это «мотоцикл», а не «мотоцикл», поэтому ваша переменная должна быть названа motorcycle, а не motorCycle.
  • Это "карта хешей", так что вы идете hashMap, а не hashmap.
  • «Воскресенье» - это одно слово -> sundayнет sunDay.
  • Хотя «день недели» был бы dayOfWeek, нет dayofweek.
oezi
источник
4
Для чего это стоит, моя команда и я обычно используем hashmapв качестве одного слова, хотя по иронии судьбы мы не для tree map.
пожимает
1
Что ж, мотоцикл - это своего рода крайний случай (изначально это был мотоцикл, хотя теперь это нечто иное); honeyBee(и не honeybeeна самом деле не «пчела», а «пчела»), а butterfly.
Оромэ
3
setUpСлучай без адреса - это крайний случай, хотя это одно слово, но JUnitисторически он назывался инициализацией прибора setUp.
TC1
23
@ TC1 На самом деле «настройка» - это существительное , а не глагол. «Настройте» правильную форму действия. JUnitправильно, остальные из нас - крайний случай. :)
Джейсон C
3
@JasonC Спасибо, наконец, есть смысл, почему ответная сторона tearDown: D
TC1
44

Часть 1
Я думаю, что вас сбивает с толку то, что некоторые из ваших примеров являются сложными словами , а другие нет.

  • номер телефона // не составное слово
  • мотоцикл // сложное слово
  • длина волны // сложное слово
  • солнцезащитный крем // сложное слово
  • Воскресенье // сложное слово *
  • цвет мотоцикла // составное слово, используемое с не составным словом.

Составные слова не следуют за обозначением верблюжьего слова для второго слова в составном слове.

Так оно motorcycleи есть motorCycle.

Но «номер телефона» не является составным словом, и оно будет следовать за обозначением верблюжьего случая то есть phoneNumber.

И это приводит к: motorcycleColor.

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

Часть 2
Два ваших примера немного сложнее.

  • хэш-карта
  • хеш-таблица

Они хитры, потому что некоторые пишут их как «hashmap» и «hashtable». В соответствии со словарем, который я только что проверил, это отдельные слова, а не составное слово. Так что верный верблюжий случай был бы hashMapи hashTable. Не каждая команда следует этому соглашению, поэтому вам нужно спросить своих товарищей по команде, что они предпочитают, а затем придерживаться этого. В этом случае последовательность важнее, чем то, что словарь может сказать правильно.

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


источник
6
Все остальные дни недели тоже были составными: «понедельник» <- лунный день, вторник <- день Тива, среда <- день Водена, четверг <- день Тора, пятница <- день Фригга, суббота <- день Сатурна
Кевин cline
6
@kevincline: Эти формы названий дней, вероятно, в настоящее время считаются архаичными, поэтому в практических целях это не считается. ... Если вы на самом деле не писать код , который выглядит if (currentDay == thorsDay) {...Хмм ... слишком плохие библиотеки даты не имеют , что в качестве опции форматирования , если вы хотите , чтобы получить полное название дня недели.
FrustratedWithFormsDesigner
15
@FrustratedWithFormsDesigner: дело в том, что в современном использовании воскресенье является составным словом в той же степени, что и понедельник: совсем нет. Это просто случайность , что «ВС» в «воскресенье» может стоять в одиночестве, в то время как «Луна день» был сокращен до «Понедельник»
Кевин Клайн
6
Еще лучше, используйте лучшие имена для ваших переменных, чем hashMap или hashTable. Это скользкая дорога, которая ведет к этой замечательной строке кода:HashMap hashMap = new HashMap();
Эрик Андрес
8

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

Чтобы предотвратить это, программисты должны использовать стандартную ссылку (например, dictionary.com ), когда они не уверены в правописании или использовании заглавных букв. Тем не менее, если согласованность именования важна для вашего проекта, ничто не заменит обзор кода.

Выбор одной ссылки для вашего проекта разрешит большинство споров по поводу заглавных букв и орфографии. Есть некоторые соединения, такие как Hashtable, которые отсутствуют в словарях, но пишутся заглавными буквами в API Java и C #. Вы хотите принять решение по всему проекту о тех. В Java это «HashMap», но «Hashtable». ИМО "Hashtable" явно неверен; оно никогда не появляется как отдельное слово, кроме как как имя в API.

Кевин Клайн
источник
4

Самый простой способ сделать верблюжий случай - это разграничение слов.

Примеры из вашего вопроса:

  • номер телефона: номер телефона
  • мотоцикл: мотоцикл
  • воскресенье: воскресенье
  • длина волны: длина волны

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

  • вспомогательное (это слово из 5 слогов; не говоря уже о том, что я похож на дерьмо для немоноширинных / без засечек шрифтов).
Джефф Лангемайер
источник
5
номер телефона не является его собственным словом, поместите его в Google как одно слово, он с радостью найдет все, что имеет «номер телефона», а не номер телефона. И настройка - это не два слова и не пароль.
Джефф Лангемайер
6
@JeffLangemeier Очень маленькая придирка: «установка» - это существительное, а «установка» - глагол. Следовательно, если у вас есть объект, представляющий, как что-то настроено, он будет вызван setup, в то время как если бы у вас была функция для настройки чего-либо, он был бы вызван setUp.
Bdesham
2
@bdesham Я понимаю это, но я бы просто держался подальше от setUp, так как будет инициализирован лучший, менее неоднозначный глагол, я фактически полностью забыл о версии глагола установки.
Джефф Лангемайер
1
Я бы подумал, что тот, который начинается с «ва», может быть wavelengthлибо в waveLengthзависимости от того, относится ли рассматриваемое значение к скорости распространения, деленной на частоту, либо к «длине» (не обязательно расстоянию) какой-либо волны. , Например, переменная библиотеки синтеза звука для числа семплов, связанных с волной, не будет, wavelengthно waveLength.
суперкат
2
@kevincline: в механизмах аудиосинтеза обычно есть таблицы волн, которые содержат один или несколько целых образцов волны. Когда воспроизведение достигает конца таблицы, оно возвращается либо к началу (для простых движков), либо к другому месту в волне. Конечно, WaveLengthсамо по себе было бы немного расплывчато в любом, кроме самых упрощенных сценариев [касается ли это размера буфера или длины секции цикла), но слова вполне могли бы появиться в более длинном имени.
суперкат
4

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

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

А в английском языке три основных способа написания составного слова - открытый (с пробелом между двумя словами), дефис и закрытый (без пробела или дефиса между ними). И хотя в некоторых ситуациях существуют некоторые правила, касающиеся переноса открытых соединений, на самом деле не так уж много жестких правил для того, чтобы знать, какая форма используется для данного соединения, кроме того, что видят другие люди, и бывают случаи, когда вы найдет два или даже все три форм ( Eggbeater , Eggbeater и яйцо ударное , например).

Здесь номер телефона почти всегда пишется открытым, поэтому его следует рассматривать как два слова.

А при взаимном перекрытии для формирования токена пробел или дефис удаляются, а второе и последующее слово пишутся в заглавном регистре, следовательно, phoneNumberили PhoneNumberв соответствии с вашим соглашением.

То, что phoneNumberкажется странным, - это то, что это чаще всего дается, как phoneв большинстве контекстов, или numberкогда контекст касается телефонной связи.

Джон Ханна
источник
2

Обеспечить согласованность в файле кода.

Содействие согласованности в коде проекта.

Предпочитают согласованность в библиотеке кода.

Состав слов для представления понятий меняется по мере того, как мы становимся более знакомыми с данной агглютинацией .

Например...

  • «телефонный аппарат» стал сокращаться до «телефон»
  • «телефон» стал сокращаться до «телефон»
  • «номер телефона» иногда заключался в «номер телефона»
  • «номер телефона» вскоре стал «номер телефона»
  • «номер телефона» часто сокращается до «телефон»
  • «мобильный телефон», или просто «сотовый» сегодня широко используются
  • «домашний телефон» и «рабочий телефон» могут скоро стать обычным явлением

Обратите внимание, что программа проверки орфографии StackExchange не может принять решение. «Телефонный номер» в конце вышеприведенного предложения был в порядке, но он помечает номер в начале предложения (с большой буквы или нет).

Столько, сколько большинство желает, чтобы был «один правильный путь» делать что-либо, когда дело доходит до языка, этого никогда не может быть. К тому времени, когда вы закончите свой проект, использование, вероятно, изменится. Конечно, ваше понимание изменится и функциональность метода / et.al. вероятно, тоже изменился. (В этом случае вам, вероятно, следует изменить имя соответствующим образом.)

DocSalvager
источник
-1

С чисто технической (американской) точки зрения, где xxx-yyy-zzzz - это то, что вы обычно называете «номером телефона», часть xxx должным образом называется кодом города, часть yyy правильно называется обмен, и zzzz правильно называется числом.

Поскольку «номер телефона» не только не является составным словом (пока), но если оно становится одним, оно будет неправильно ссылаться на что-то вне намерения своего создателя, я бы сказал, что для синтаксиса camelCase потребуется phoneNumber для любой переменной, которая на него ссылается, но если вы собираетесь делать что-либо с реальной телефонной системой, я бы использовал phoneExchangeNumber для семизначного числа и phoneACExchangeNumber для десятизначного числа.

MLT
источник
1
это , кажется, не предлагает ничего существенного над точкой сделана и объяснена в этом предварительном ответе , который был размещен в течение 3 -х лет до
комара