Як написати корпус верблюда для слів, таких як "номер телефону", "мотоцикл", "довжина хвилі" тощо


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" (і неправильне "filename"). Я думаю, що це слово написано по-різному від програміста до програміста ...
Рей

3
@PacMani Вам може сподобатися тут дискусія !
Джейсон C

4
@ 909Niklas Я б максимально скинув "ім'я". Просто використовуйте "street" Якщо це рядок, це ім'я, якщо це не згубно чи заплутано. usernameце те, що це, це позивний, а не "ім'я користувача", тож це більше нагадує мотоцикл, ніж firstName або lastName (яке слід задекларувати)
Peter Turner

2
@PeterTurner Деякі програмісти кажуть, що це streetповинен бути клас та nameодин з його атрибутів / членів даних.
JAB

Відповіді:


173

Ви повинні використовувати великі літери після того, де "нормально" буде пробіл (коли ви пишете лист замість вихідного коду). Ваше перше припущення правильне:

  • Це "мотоцикл", а не "мотоцикл", тому ваша змінна повинна бути названа motorcycle, а не motorCycle.
  • Це "хеш-карта", так що ви йдете з hashMapне hashmap.
  • "Неділя" - одне слово -> sunday, ні sunDay.
  • Хоча "день тижня" був би dayOfWeek, ні dayofweek.

4
Чого варто, ми з моєю командою взагалі вживаємо hashmapяк одне слово, хоча за іронією долі ми цього не робимо tree map.
знизати

1
Що ж, мотоцикл - це трохи крайній випадок (насправді це був, власне, спочатку мотоцикл, хоча зараз це щось інше); honeyBee(а не honeybeeнасправді не "медоносна бджола", а "медоносна бджола"), а butterfly.
orome

3
Незареєстрований setUpкорпус є кращим регістром, хоча це одне слово, але JUnitісторично він має ініціалізацію кріплення setUp.
TC1,

23
@ TC1 Власне, "setup" - це іменник , ніколи не дієслово. "Налаштуйте" правильну форму дії. JUnitце правильно, решта з нас є краєм справи. :)
Джейсон C

3
@JasonC Спасибі, нарешті, є сенс, чому зустрічна частина tearDown: D
TC1,

44

Частина 1
Я думаю, що вас спонукає те, що деякі ваші приклади є складними словами , а інші - ні.

  • номер телефону // не складене слово
  • мотоцикл // складене слово
  • довжина хвилі // складене слово
  • сонцезахисний крем // складене слово
  • Неділя // складене слово *
  • колір мотоцикла // складне слово, що вживається із нескладеним словом.

Складені слова не відповідають позначенню верблюдового відмінка для другого слова у складному слові.

Так це motorcycleі немає motorCycle.

Але "номер телефону" не є складним словом, і він повинен відповідати позначенню справи верблюда. тобто phoneNumber.

І це призводить до: motorcycleColor.

Якщо я не можу згадати, чи це слово справді складне слово чи ні, я шукаю це у словнику, щоб бути певним.

Частина 2
Два ваших прикладу трохи складніше.

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

Вони складні, тому що деякі будуть писати їх як "хешмап" та "хештеб". Згідно зі словником, який я щойно перевірив, це окремі слова, а не складені слова. Тож правильний випадок верблюда був би hashMapі hashTable. Не кожна команда дотримується цієї конвенції, тому вам потрібно запитати своїх товаришів по команді, що вони віддають перевагу, а потім дотримуватися цього. У цій справі важливіша послідовність, ніж те, що словник може сказати, є правильним.

* Дехто буде сперечатися про те, що неділя є складним словом, оскільки інших днів тижня це не так, але для цілей цього питання я зупинюсь на цьому питанні. Це найлегше трактувати як складене слово, і тому немає верблюда.


6
В інші дні тижня теж були всі сполуки: "понеділок" <- місячний день, вівторок <- день Тіва, середа <- день Водена, четвер <- день Тор, п'ятниця <- день Фрігга, субота <- день Сатурна
кевін клан

6
@kevincline: Ці форми назв днів, мабуть, зараз вважаються архаїчними, тому насправді не рахуйте з практичними цілями. ... Якщо ви фактично не пишете код, схожий на if (currentDay == thorsDay) {...Хм ... занадто погані бібліотеки дат не мають цього варіанту форматування, коли ви хочете отримати повну назву дня тижня.
FrustratedWithFormsDesigner

15
@FrustratedWithFormsDesigner: Справа в тому, що в сучасному використанні неділя є складним словом у тій же мірі, що і понеділок: зовсім не. Це просто випадковість, що "Сонце" у "Неділю" може стояти окремо, тоді як "Місячний день" був скорочений до "Понеділок"
Кевін Клайн

6
А ще краще використовувати кращі імена своїх змінних, ніж hashMap або hashTable. Це слизька дорога, яка веде до цього чудового рядка коду:HashMap hashMap = new HashMap();
Ерік Андрес

8

Як вказували інші, приєднання слів використовується верблюжою справою. Не використовуйте корпус верблюда в межах одного англійського слова. Проблема полягає у визначенні, які сполуки є єдиними словами. Залишені самими собою, програмісти приймуть різні рішення залежно від їхнього знання англійської мови. Це призводить до невідповідностей капіталізації, які майже такі ж дратівливі, як і неправильні написання.

Щоб цього не допустити, програмісти повинні використовувати стандартні посилання (наприклад, Dictionary.com ), коли вони не впевнені в написанні чи великої літери. Незважаючи на це, якщо послідовність в іменуванні важлива для вашого проекту, заміни для перегляду коду немає.

Вибір єдиного довідника для вашого проекту дозволить вирішити більшість аргументів щодо великої літери та написання. Є деякі сполуки на зразок Hashtable, які відсутні в словниках, але в Java та C # використовуються великі літери. Ви хочете прийняти загальнопроектне рішення щодо цих питань. У Java це "HashMap", але "Hashtable". IMO "Hashtable" явно неправильний; воно ніколи не з'являється як одне слово, крім як ім'я в API.


4

Найпростіший спосіб зробити справу верблюда - це розмежування слів.

Приклади вашого запитання:

  • номер телефону: номер
  • мотоцикл: мотоцикл
  • неділя: неділя
  • довжина хвилі: довжина хвилі

Якщо ви не розділили його на два слова, на ньому також не слід використовувати чохол верблюда. Інакше ви використовуєте його на складах і як це нерозумно це виглядає

  • auxIlIArY (Це 5 складних слів; не кажучи вже про те, що я схожий на лайно в немоноскопічних / sans-serif шрифтах).

5
номер телефону - це не власне слово, введіть його в google як одне слово, він із задоволенням шукатиме все, що має номер телефону, а не номер телефону. І налаштування - це не два слова, а також пароль.
Jeff Langemeier

6
@JeffLangemeier Дуже невелика приказка: "setup" - це іменник, а "set" - дієслово. Отже, якщо у вас є об'єкт, який представляє, як щось налаштовано, він би називався setup, тоді як якщо у вас була функція, щоб щось налаштувати, вона буде називатися setUp.
бдешам

2
@bdesham Я усвідомлюю це, але я просто тримаюся подалі від setUp, оскільки краще, менш неоднозначне дієслово буде ініціалізуватися, я фактично повністю забув про вербальну версію установки.
Jeff Langemeier

1
Я думаю, те, що починається з "wa", може бути wavelengthабо waveLengthзалежно від того, чи стосується значення, яке стосується швидкості поширення, поділеної на частоту, чи стосується воно "довжини" (не обов'язково відстані) якоїсь хвилі . Наприклад, змінна бібліотека синтезу аудіо для кількості зразків, пов'язаних з хвилею, не буде, wavelengthале waveLength.
supercat

2
@kevincline: У двигунах синтезу звукового сигналу прийнято мати хвильові таблиці, які містять одну або більше цілих зразків хвилі. Коли відтворення доходить до кінця таблиці, воно повертається назад або на початок (для простих двигунів), або на якесь інше місце в хвилі. Безумовно, WaveLengthсаме по собі було б трохи розпливчастим у будь-якому, але найбільш спрощеному сценарії (чи стосується він розміру буфера чи довжини петельного розділу), але слова цілком могли б відображатися у більшій назві.
supercat

4

Ось тут ускладнення з простою англійською мовою перешкоджає тому, як згодом хтось зловживає англійською мовою, щоб відповідати правилам білого пробілу лексем у контекстах програмування.

З наведених прикладів слів, майже всі є сполуками. Неділя не є, оскільки вона виникла як складова, але це було так давно, що її навряд чи можна вважати такою зараз, тим більше, що її присвячення сонце є більш історичною цікавістю, ніж сильною частиною релігійного та культурного світогляд англомовних людей.

В англійській мові три основні способи написання сполуки - це відкритий (з пробілом між двома словами), дефіс і закритий (без пробілу або дефісу між двома). І хоча існують деякі правила щодо переносу відкритих сполук у певних ситуаціях, насправді не існує чітких правил у тому, щоб знати, яка форма використовується для даної сполуки, крім того, щоб побачити, що роблять інші люди, і все ще є випадки, коли ви Ви знайдете дві або навіть усі три форми ( наприклад , яєчниця , збивач яєць та яєць ).

Тут номер телефону майже завжди пишеться відкритим, тому його слід трактувати як два слова.

І при взаємозаміні, щоб утворити маркер, пробіл або дефіс видаляється, а друге і наступне слово пишеться в заголовку, отже, phoneNumberабо PhoneNumberяк підходить для вашого конвенту.

Те, що phoneNumberздається дивним, - це, мабуть, те, що це частіше просто надається, як phoneу більшості контекстів, або numberколи контекст стосується телефонного зв'язку.


2

Забезпечити послідовність у файлі коду.

Сприяти узгодженості кодового проекту.

Віддайте перевагу консистенції в бібліотеці кодів.

Складення слів для представлення понять змінюється в міру того, як ми ознайомлюємося з даною аглютинацією .

Наприклад...

  • "телефонний апарат" скоротився до просто "телефону"
  • "телефон" скоротився до просто "телефону"
  • "номер телефону" іноді був укладений у "номер телефону"
  • 'номер телефону' незабаром став 'номер телефону'
  • 'номер телефону' часто ще більше скорочується до просто 'телефон'
  • "Мобільний телефон" або просто "стільниковий" сьогодні є загальним для використання
  • "домашній телефон" і "робочий телефон" можуть незабаром також стати загальними

Зауважте, що перевірка орфографії StackExchange не може вирішити свою думку. "Телефонний номер" в кінці речення вище був гарним, але він позначає той, що на початку речення (з великої літери чи ні).

Стільки, скільки всі бажають, щоб там було "одним правильним способом" робити речі, коли мова йде про мову, цього ніколи не може бути. До того часу, як ви закінчите проект, використання, ймовірно, змінилося. Звичайно, ваше розуміння зміниться і функціональність методу / et.al. певно, теж змінилися. (У такому випадку ви, ймовірно, повинні відповідним чином змінити ім’я.)


-1

З суворо технічної точки зору (у США), коли xxx-yyy-zzzz - це те, що ви зазвичай вважаєте "телефонним номером", частина xxx належним чином називається кодом області, yyy частина належним чином називається " обмін, і zzzz правильно називається числом.

Оскільки не тільки "phonenumber" не є складним словом (все-таки), але якщо воно стане таким, воно буде неправильно посилатися на щось поза межами наміру свого творця, я б сказав, що синтаксис camelCase вимагає phoneNumber для будь-якої змінної, на яку посилається, але якщо Ви збираєтесь робити що-небудь із фактичною телефонною системою, я б використовував phoneExchangeNumber для семизначного та phoneACExchangeNumber для десятизначної версії.


1
це, здається, не пропонує нічого суттєвого щодо питань, викладених та пояснених у цій попередній відповіді, що була розміщена за 3 роки до цього
gnat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.