Jak napisać etui na wielbłądy dla słów takich jak „numer telefonu”, „motocykl”, „długość fali” itp

75

Mam problem ze zrozumieniem, jak zastosować składnię camelCase do niektórych nazw zmiennych.

Na przykład, jak poprawnie napisać słowo „numer telefonu” w przypadku wielbłąda? Czy to phoneNumberczy phonenumber? Podobnie jest z „username”, jest to usernamealbo userName?

Myślę, że to nie wygląda dobrze z przypadku wielbłąda jak motorCycle, passWord, sunDay, setUplub waveLength, ponieważ są to tylko jedno słowo każdego. Myślę, że może to być powód, dla którego się nazywa, hashMapale także hashtablew przypadku wielbłądów bez kapitału w ostatnim przypadku, ponieważ tablica skrótów to jedno słowo, a mapa skrótów to dwa słowa.

Ale jeśli motocykl ma kolor, to czy byłoby tak, motorcycleColorponieważ słowo jest konkatenowane? Czy to prawda, czy też powinna być phoneNUmber, waveLength, sunBlocka nawet sunDayw niedzielę tygodnia?

Dlaczego na przykład metoda jest wywoływana, getISOCountriesgdy mówi HttpHeadersnp. Nie jest jasne, co stanie się małymi literami, jeśli mamy metodę taką jak String camelCaseString = dog.toCamelCase()lub interface CamelCase.

Powiązane: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces

Niklas Rosencrantz
źródło
7
W przypadkach, w których naprawdę trudno jest stwierdzić, czy fraza składająca się z dwóch słów jest słowem złożonym, wybierz wielkie litery i trzymaj się tego. Podobnie jak w przypadku większości konwencji kodowania, najważniejsza jest spójność w ramach jednego projektu.
Kevin
2
Świetne pytanie, zawsze zadawałem sobie pytanie, jak napisać „nazwa_pliku” (i niewłaściwą „nazwę pliku”). Myślę, że to słowo jest napisane inaczej od programisty do programisty ...
Ray
3
@PacMani Możesz cieszyć się dyskusją tutaj !
Jason C
4
@ 909Niklas Upuściłbym „imię” całkowicie, jak to możliwe. Po prostu użyj „ulicy”. Jeśli jest to ciąg znaków, jest to nazwa, chyba że jest to szkodliwe lub mylące. usernamejest tym, czym jest, jest to znak wywoławczy, a nie „nazwa użytkownika”, więc bardziej przypomina motocykl niż imię lub nazwisko (które powinno być zamaskowane)
Peter Turner
2
@PeterTurner Niektórzy programiści powiedzieliby, że streetpowinna to być klasa i namejeden z jej atrybutów / elementów danych.
JAB

Odpowiedzi:

173

Powinieneś wpisać wielką literę po tym, gdzie „normalnie” będzie spacja (kiedy napiszesz literę zamiast kodu źródłowego). Twoje pierwsze założenie jest prawidłowe:

  • To „motocykl”, a nie „motocykl”, więc twoja zmienna powinna być nazwana motorcycle, a nie motorCycle.
  • To „mapa skrótów”, więc hashMapnie hashmap.
  • „Niedziela” to jedno słowo -> sundaynie sunDay.
  • Chociaż „dzień tygodnia” byłby dayOfWeek, nie dayofweek.
oezi
źródło
4
Co do tego, co jest warte, mój zespół i ja zwykle używamy hashmapjako jednego słowa, choć jak na ironię nie tree map. wzruszenie ramionami
corsiKa
1
Cóż, motocykl to trochę przewrotna sprawa (pierwotnie był to motocykl, choć teraz jest to coś innego); honeyBee(a nie honeybee, w rzeczywistości nie „pszczoły miodnej”, ale „pszczoły miodnej”), oraz butterfly.
orome
3
setUpPrzypadek nieadresowany jest jednak przypadkiem na krawędzi, jest to pojedyncze słowo, ale JUnithistorycznie ma swoją nazwę inicjalizacji urządzenia setUp.
TC1,
23
@ TC1 Właściwie „setup” to rzeczownik , nigdy czasownik. „Ustaw” prawidłową formę akcji. JUnitma rację, reszta z nas ma przewagę. :)
Jason C
3
@JasonC Dzięki, wreszcie ma sens, dlaczego odpowiednikiem jest tearDown: D
TC1
44

Część 1
Myślę, że tym, co cię denerwuje, jest to, że niektóre z twoich przykładów są złożonymi słowami , podczas gdy inne nie.

  • numer telefonu // nie słowo złożone
  • motocykl // słowo złożone
  • długość fali // słowo złożone
  • sunblock // słowo złożone
  • Niedziela // słowo złożone *
  • kolor motocykla // słowo złożone użyte ze słowem nie złożonym.

Słowa złożone nie są zgodne z notacją wielbłąda dla drugiego słowa w słowie złożonym.

Tak jest motorcyclei nie motorCycle.

Ale „numer telefonu” nie jest słowem złożonym i byłby zgodny z notacją wielbłąda. tj phoneNumber.

A to prowadzi do: motorcycleColor.

Jeśli nie mogę sobie przypomnieć, czy słowo jest naprawdę słowem złożonym, czy nie, szukam go w słowniku, aby się upewnić.

Część 2
Dwa z twoich przykładów są trochę trudniejsze.

  • mapa hash
  • tabela mieszania

Są trudne, ponieważ niektórzy przeliterują je jako „skrót mapy” i „skrót tablicy”. Według słownika, który właśnie sprawdziłem, są to osobne słowa, a nie słowo złożone. Tak więc właściwym przypadkiem wielbłąda byłoby hashMapi hashTable. Nie każda drużyna przestrzega tej konwencji, więc musisz zapytać członków drużyny, co wolą, a następnie trzymać się tego. Spójność jest w tym przypadku ważniejsza niż to, co może powiedzieć słownik.

* Niektórzy spierają się o to, że niedziela jest słowem złożonym, ponieważ inne dni tygodnia nie są, ale dla celów tego pytania pominę ten problem. Najłatwiej jest traktować je jako słowo złożone, a zatem bez wielbłąda.


źródło
6
Pozostałe dni tygodnia to także wszystkie związki: „poniedziałek” <- dzień księżyca, wtorek <- dzień Tiw, środa <- dzień Wodena, czwartek <- dzień Thora, piątek <- dzień Frigga, sobota <- dzień Saturna
kevin cline
6
@kevincline: Te formy nazw dni są prawdopodobnie uważane za archaiczne, więc tak naprawdę nie liczą się do celów praktycznych. ... Chyba że faktycznie piszesz kod, który wygląda jak if (currentDay == thorsDay) {...Hmm ... zbyt złe biblioteki dat nie mają tego jako opcji formatowania, gdy chcesz uzyskać pełną nazwę dnia tygodnia.
FrustratedWithFormsDesigner
15
@FrustratedWithFormsDesigner: chodziło o to, że we współczesnym użyciu niedziela jest słowem złożonym w takim samym stopniu, jak poniedziałek: wcale. To tylko przypadek, że „Słońce” w „Niedzieli” może stać samodzielnie, podczas gdy „Księżycowy dzień” został skrócony do „poniedziałku”
Kevin Cline
6
Jeszcze lepiej, używaj lepszych nazw dla swoich zmiennych niż hashMap lub hashTable. To śliska droga, która prowadzi do tego wspaniałego wiersza kodu:HashMap hashMap = new HashMap();
Eric Andres
8

Jak zauważyli inni, przy łączeniu słów używana jest obudowa wielbłąda. Nie używaj wielbłąda w jednym angielskim słowie. Problem polega na określeniu, które związki są pojedynczymi słowami. Programiści, pozostawieni sami sobie, podejmą różne decyzje w zależności od ich znajomości języka angielskiego. Prowadzi to do niespójności w pisowni wielkimi literami, które są prawie tak irytujące jak błędy ortograficzne.

Aby temu zapobiec, programiści powinni używać standardowego źródła (np. Dictionary.com ), gdy nie są pewni co do pisowni lub wielkich liter. Mimo to, jeśli konsekwencja w nazewnictwie jest ważna dla twojego projektu, nie ma substytutu dla przeglądu kodu.

Wybór jednego odwołania do projektu rozwiąże większość argumentów dotyczących wielkich liter i pisowni. Istnieje kilka związków, takich jak Hashtable, których nie ma w słownikach, ale są one pisane wielkimi literami w interfejsach API Java i C #. Będziesz chciał podjąć decyzję w sprawie całego projektu. W Javie jest to „HashMap”, ale „Hashtable”. „Tablica skrótów” IMO jest wyraźnie niepoprawna; nigdy nie pojawia się jako pojedyncze słowo, z wyjątkiem nazwy w interfejsie API.

Kevin Cline
źródło
4

Najprostszym sposobem na wykonanie wielbłąda jest określenie słowa.

Przykłady z twojego pytania:

  • numer telefonu: numer telefonu
  • motocykl: motocykl
  • niedziela: niedziela
  • długość fali: długość fali

Jeśli nie podzielisz go na dwa słowa, nie powinieneś również używać na nim futerału na wielbłądy. W przeciwnym razie używasz go na sylabach i jak głupio to wygląda

  • pomocniczy (Jest to 5-sylabowe słowo; nie wspominając o tym, że wyglądam jak bzdury na czcionkach nieposiadających monospac / sans-serif).
Jeff Langemeier
źródło
5
numer telefonu nie jest jego własnym słowem, umieść go w Google jako pojedyncze słowo, chętnie wyszukuje wszystko, co ma „Numer telefonu”, a nie numer telefonu. Konfiguracja nie składa się z dwóch słów, nie ma też hasła.
Jeff Langemeier
6
@JeffLangemeier Bardzo mały spór: „setup” to rzeczownik, podczas gdy „setup” to czasownik. Dlatego jeśli masz obiekt reprezentujący sposób skonfigurowania czegoś, zostanie on wywołany setup, a jeśli masz funkcję do skonfigurowania czegoś, zostanie on wywołany setUp.
bdesham
2
@bdesham Zdaję sobie z tego sprawę, ale po prostu trzymałbym się z dala od setUp, ponieważ zainicjalizowany byłby lepszy, mniej dwuznaczny czasownik, właściwie zupełnie zapomniałem o czasownikowej wersji instalacji.
Jeff Langemeier
1
Myślę, że ten, który zaczyna się od „wa”, może być wavelengthalbo w waveLengthzależności od tego, czy przedmiotowa wartość dotyczy prędkości propagacji podzielonej przez częstotliwość, czy też odnosi się do „długości” (niekoniecznie odległości) jakiegoś rodzaju fali . Na przykład zmienna biblioteki syntezy audio dla liczby próbek związanych z falą nie byłaby, wavelengthale waveLength.
supercat
2
@kevincline: W silnikach syntezy audio często występują tabele fal zawierające jedną lub więcej całych próbek fali. Gdy odtwarzanie osiąga koniec tabeli, zapętla się z powrotem do początku (w przypadku prostych silników) lub do innego miejsca na fali. Oczywiście, WaveLengthsamo w sobie byłoby nieco niejasne w każdym, poza najbardziej uproszczonymi scenariuszami [czy odnosi się to do wielkości bufora lub długości odcinka zapętlonego], ale słowa te mogłyby doskonale występować pod dłuższą nazwą.
supercat
4

To tutaj komplikacja ze zwykłym angielskim przeszkadza w późniejszym nadużyciu angielskiego w celu dopasowania do reguł białych znaków dla tokenów w kontekście programowania.

Z podanych przez ciebie słów prawie wszystkie są związkami. Niedziela nie jest, jakkolwiek powstała jako związek, tak dawno temu, że nie można jej obecnie uznać za taką, zwłaszcza że poświęcenie jej słońcu jest bardziej historyczną ciekawostką niż silną częścią religii i kultury perspektywy osób anglojęzycznych.

W języku angielskim trzy główne sposoby pisania związku są otwarte (ze spacją między dwoma słowami), dzielone i zamykane (bez spacji lub łącznika między nimi). I chociaż istnieją pewne zasady dotyczące dzielenia otwartych związków w określonych sytuacjach, tak naprawdę nie ma zbyt wielu zasad dotyczących ustalania, która forma jest używana dla danego związku, poza tym, że widzą to, co robią inni ludzie, i wciąż są chwile, kiedy „ll znaleźć dwa lub nawet wszystkie trzy formy ( eggbeater , eggbeater i jaj trzepak na przykład).

Tutaj numer telefonu jest prawie zawsze otwarty, więc należy go traktować jako dwa słowa.

A kiedy inter-capping w celu utworzenia tokena, spacja lub łącznik są usuwane, a drugie i kolejne słowo jest pisane tytułem tytułu, stąd phoneNumberlub PhoneNumberzgodnie z konwencją.

Rzeczą, która phoneNumberwydaje się dziwna, jest prawdopodobnie to, że częściej podaje się ją tak, jak phonew większości kontekstów lub numbergdy kontekst dotyczy połączenia telefonicznego.

Jon Hanna
źródło
2

Zapewnij spójność w pliku kodu.

Promuj spójność w projekcie kodu.

Preferuj spójność w bibliotece kodów.

Łączenie słów w celu przedstawienia pojęć zmienia się, gdy lepiej poznamy daną aglutynację .

Na przykład...

  • „zestaw telefoniczny” został skrócony do samego „telefonu”
  • „telefon” został skrócony do samego „telefonu”
  • „numer telefonu” bywał czasem zamieniany na „numer telefonu”
  • „numer telefonu” wkrótce stał się „numerem telefonu”
  • „numer telefonu” jest często skracany do samego „telefonu”
  • „telefon komórkowy” lub po prostu „telefon komórkowy” są dziś powszechnie używane
  • „telefon” i „telefon służbowy” mogą wkrótce stać się powszechne

Zauważ, że moduł sprawdzania pisowni StackExchange nie może się zdecydować. „Numer telefonu” na końcu powyższego zdania był w porządku, ale oznacza ten na początku zdania (wielkie litery lub nie).

Tak jak większość pragnie, aby istniał „jeden właściwy sposób” robienia rzeczy, jeśli chodzi o język, to nigdy nie może być. Do czasu zakończenia projektu wykorzystanie prawdopodobnie ulegnie zmianie. Z pewnością zmieni się twoje zrozumienie i funkcjonalność metody / et.al. prawdopodobnie też się zmieni. (W takim przypadku prawdopodobnie należy odpowiednio zmienić nazwę).

DocSalvager
źródło
-1

Z czysto technicznego punktu widzenia (USA), gdzie xxx-rrrr-zzzz to coś, co normalnie byś myślał jako „numer telefonu”, część xxx jest właściwie określana jako numer kierunkowy, część yyy jest odpowiednio nazywana wymiany, a zzzz jest odpowiednio nazywany liczbą.

Ponieważ „numer telefonu” nie jest jeszcze słowem złożonym (jeszcze), ale jeśli się nim stanie, niepoprawnie będzie odwoływał się do czegoś poza intencją twórcy, powiedziałbym, że składnia camelCase wymagałaby numeru telefonu dla każdej zmiennej, która się do niego odwołuje, ale jeśli zrobisz cokolwiek z rzeczywistym systemem telefonicznym, użyłbym phoneExchangeNumber dla siedmiocyfrowej i phoneACExchangeNumber dla dziesięciocyfrowej wersji.

MLT
źródło
1
wydaje się, że nie oferuje to nic istotnego w porównaniu z punktami przedstawionymi i wyjaśnionymi w poprzedniej odpowiedzi, która została opublikowana ponad 3 lata wcześniej
komnata