"phonenumber", "motorcycle", "wavelength"등과 같은 단어에 대한 낙타 케이스 작성 방법


75

일부 변수 이름에 camelCase 구문 을 적용하는 방법을 이해하는 데 문제가 있습니다.

예를 들어, 낙타의 경우 "phonenumber"와 같은 단어를 어떻게 정확하게 작성해야합니까? 그것은인가 phoneNumber또는 phonenumber? "username"과 마찬가지로 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")을 작성하는 방법을 스스로에게 물었습니다. 나는이 단어가 프로그래머마다 다르다고 생각한다 ...
Ray

3
@PacMani 여기서 토론을 즐길 수 있습니다 !
Jason C

4
@ 909Niklas "name"을 가능한 한 많이 떨어 뜨립니다. "street"만 사용하십시오. 문자열 인 경우 해롭거나 혼동되지 않는 한 이름입니다. username그것은 "사용자 이름"이 아니라 호출 부호이기 때문에 firstName 또는 lastName (낙타되어야 함)보다 오토바이와 비슷합니다.
Peter Turner

2
@PeterTurner 일부 프로그래머는 street클래스와 name그 속성 / 데이터 멤버 중 하나 여야 한다고 말합니다 .
JAB

답변:


173

공백이있는 곳 (소스 코드 대신 문자를 쓸 때) 이후에 문자를 대문자로 사용해야합니다. 첫 번째 가정은 맞습니다.

  • "모터 사이클"이 아니라 "모터 사이클"이므로 변수의 이름 motorcycle이 아닌 이어야합니다 motorCycle.
  • 당신이 가고 그래서는 "해시 맵"입니다 hashMap,하지 hashmap.
  • > - "일요일"하나 개의 단어 sunday가 아니라 sunDay.
  • "요일"은 dayOfWeek그렇지 않지만 dayofweek.

4
가치가있는 것을 위해, 우리 팀과 나는 일반적으로 hashmap하나의 단어로 사용하지만, 아이러니하게도 우리는 그렇지 않습니다 tree map. 어깨를 으
corsiKa

1
자, 오토바이는 약간의 엣지 케이스입니다 (실제로는 원래 모터 사이클 이었지만 지금은 달라졌습니다). honeyBee(그리고 honeybee실제로는 "꿀벌"이 아니라 "꿀벌"이 아닙니다) butterfly.
orome

3
주소가 지정되지 않은 setUp경우는 가장 중요한 경우이지만 한 단어이지만 JUnit역사적으로 조명기 초기화라는 이름이 setUp있습니다.
TC1

23
@ TC1 실제로 "setup"은 명사 이며 동사는 아닙니다. 올바른 조치 양식을 "설정"하십시오. JUnit맞습니다, 우리의 나머지는 가장자리 사건입니다. :)
Jason C

3
@JasonC 덕분에, 마지막으로 카운터 파트가 왜 의미가 있습니다 tearDown: D
TC1

44

1 부
나는 당신을 엉망으로 만드는 것은 당신의 예제 중 일부는 복합 단어 이고 다른 것은 그렇지 않다고 생각합니다.

  • 전화 번호 // 복합어가 아님
  • 오토바이 // 복합어
  • 파장 // 복합 단어
  • sunblock // 복합어
  • 일요일 // 복합 단어 *
  • motorcycle color // 비 복합 단어와 함께 사용되는 복합 단어.

복합 단어는 복합 단어의 두 번째 단어에 대한 낙타 대소 문자 표기법을 따르지 않습니다.

따라서 motorcycle그렇지 않습니다 motorCycle.

그러나 "전화 번호"합성어하지 않고는 낙타의 경우 표기법을 따르십시오. 즉 phoneNumber.

그리고 그 결과는 다음과 같습니다 motorcycleColor..

단어가 정말 복합적인 단어인지 기억할 수없는 경우 사전에서 확실하게 찾아 봅니다.

2 부
예제 중 두 가지가 조금 까다 롭습니다.

  • 해시 맵
  • 해시 테이블

일부는 "hashmap"과 "hashtable"로 철자를 쓰므로 까다 롭습니다. 방금 확인한 사전에 따르면, 복합 단어가 아닌 별도의 단어입니다. 그래서 낙타의 경우는 hashMap이고 hashTable. 모든 팀이 이러한 규칙을 따르는 것은 아니므로 팀원에게 원하는 것을 물어보고이를 고수해야합니다. 이 경우 사전이 말하는 것보다 일관성이 더 중요합니다.

* 어떤 요일은 일요일이 복합 단어가 아니라고 주장 할 것이지만,이 질문의 목적을 위해 나는 그 문제를 회피 할 것입니다. 복합 단어로 취급하는 것이 가장 쉽고 낙타 사건이 없습니다.


6
다른 요일도 모두 복합적이었다 : "월요일"<-달의 날, 화요일 <-Tiw의 날, 수요일 <-Woden의 날, 목요일 <-Thor의 날, 금요일 <-Frigg의 날, 토요일 <-토성 일
케빈 cline

6
@kevincline : 요즘 이름의 이러한 형태는 아마도 구식으로 간주 될 것이므로 실제로 실용적인 목적으로 계산하지 마십시오. ... 실제로 if (currentDay == thorsDay) {...흠 처럼 보이는 코드를 작성하지 않으면 ... 너무 나쁜 날짜 라이브러리에는 요일의 전체 이름을 원할 때 형식 지정 옵션이 없습니다.
FrustratedWithFormsDesigner

15
@FrustratedWithFormsDesigner : 요점은 현대적인 사용법에서 일요일이 월요일과 같은 정도로 복합 단어라는 것입니다. "달의 날"이 "월요일"단축 동안은, "일요일"의 "일"혼자 설 수 단지 우연
케빈 클라인

6
더 좋은 방법은 hashMap 또는 hashTable보다 변수 이름을 더 잘 사용하는 것입니다. 이 훌륭한 코드 라인으로 이어지는 미끄러운 길입니다.HashMap hashMap = new HashMap();
Eric Andres

8

다른 사람들이 지적했듯이 낙타 사건은 단어를 합칠 때 사용됩니다. 영어 단어 하나에 낙타 문자를 사용하지 마십시오. 문제는 어떤 단어가 하나의 단어인지 결정하는 데 있습니다. 프로그래머들은 영어에 대한 지식에 따라 다른 결정을 내릴 것입니다. 이로 인해 대문자 표기법이 일치하지 않아 철자가 틀리기 쉽습니다.

이를 방지하기 위해 프로그래머는 철자 또는 대문자 표기법이 확실하지 않은 경우 표준 참조 (예 : dictionary.com )를 사용해야합니다 . 그럼에도 불구하고 프로젝트에서 이름의 일관성이 중요한 경우 코드 검토를 대신 할 수는 없습니다.

프로젝트에 대한 단일 참조를 선택하면 대문자 및 철자에 대한 대부분의 논쟁이 해결됩니다. 사전에는 없지만 Hashtable과 같은 일부 화합물이 있지만 Java 및 C # API에서 단일 단어로 대문자로 표시됩니다. 당신은 이것들에 대해 프로젝트 전체의 결정을 원할 것입니다. Java에서는 "HashMap"이지만 "Hashtable"입니다. IMO "Hashtable"이 명확하지 않습니다. API에서 이름을 제외하고는 한 단어로 표시되지 않습니다.


4

낙타 사건을하는 가장 간단한 방법은 단어 묘사입니다.

귀하의 질문에서 예 :

  • 전화 번호 : phoneNumber
  • 오토바이 : 오토바이
  • 일요일 : 일요일
  • 파장 : 파장

두 단어로 나누지 않으면 낙타를 사용해서는 안됩니다. 그렇지 않으면 음절에 사용하고 있으며 어리석은 모양입니까?

  • auxIlIArY (이것은 5 음절 단어이며, 비단 일 간격 / 산세 리프 글꼴에서 나는 쓰레기처럼 보입니다.)

5
전화 번호는 자체 단어가 아니며 Google에 한 단어로 입력하면 전화 번호가 아닌 '전화 번호'가있는 모든 항목을 행복하게 검색합니다. 그리고 설정은 두 단어가 아니며 암호도 아닙니다.
Jeff Langemeier

6
@JeffLangemeier 매우 작은 퀴즈 : "setup"은 명사이고 "set"은 동사입니다. 따라서 무언가 설정 방법을 나타내는 객체가 있다면 그것을 호출 할 것이고 setup, 무언가를 설정하는 기능이 있다면 그것을 호출 할 것 setUp입니다.
bdesham

2
@bdesham 나는 그것을 알고 있지만, 나는 setUp에서 멀리 떨어져있을 것이다.
Jeff Langemeier

1
나는 "WA"로 시작하는 사람이 될 수 중 하나를 생각 wavelength하거나 waveLength문제의 값이 있는지 여부에 따라하는 파의 어떤 종류의 "길이"(반드시 거리되지 않음) 주파수로 나눈 전파 속도에 관한 것으로, 또는 관련된 여부 . 예를 들어, 파도와 관련된 샘플 수에 대한 음성 합성 라이브러리의 변수는되지 않을 것입니다 wavelengthwaveLength.
supercat

2
@kevincline : 오디오 합성 엔진에서 하나 이상의 전체 웨이브 샘플을 포함하는 웨이브 테이블을 갖는 것이 일반적입니다. 재생이 테이블 끝에 도달하면 시작 (간단한 엔진의 경우) 또는 웨이브의 다른 지점으로 되돌아갑니다. 확실히, WaveLength가장 단순한 시나리오 (버퍼 크기 또는 루핑 섹션의 길이를 참조 함)를 제외하고는 그 자체로는 다소 모호하지만 단어는 더 긴 이름으로 완벽하게 나타날 수 있습니다.
supercat

4

여기에서 평범한 영어와의 합병증은 나중에 프로그래밍 컨텍스트에서 토큰의 공백 규칙에 맞추기 위해 영어를 남용하는 방법을 방해합니다.

당신이 제공하는 예제 단어 중 거의 모든 것이 화합물입니다. 일요일 은 복합적으로 시작된 것이 아니기 때문에 너무 오래 전에 지금은 거의 고려할 수 없었습니다. 특히 태양에 헌신하는 것이 종교와 문화의 강한 부분보다 역사적인 호기심이기 때문입니다. 영어를 사용하는 사람들의 전망.

그리고 영어로, 화합물을 작성하는 세 가지 주요 방법은 열려 있고 (두 단어 사이에 공백이 있음) 하이픈이 있고 닫힙니다 (두 개 사이에 공백이나 하이픈이 없음). 특정 상황에서 공개 화합물에 하이픈을 넣는 것에 대한 규칙이 있지만 다른 사람들의 행동을 보는 것보다 주어진 화합물에 어떤 형태가 사용되는지 아는 확실한 규칙에는 그다지 많지 않습니다. 두 가지 또는 세 가지 형태 모두를 찾을 수 있습니다 ( 예 : 계란 때리기 , 계란 때리기계란 때리기 ).

여기서 전화 번호 는 거의 항상 공개되어 있으므로 두 단어로 취급해야합니다.

토큰을 형성하도록 상호 캐핑 때, 따라서, 공간 하이픈 또는 제거하고, 두 번째 이후 워드 표제 케이스에 기입 phoneNumber하거나 PhoneNumber하여 대회 적절.

만드는 것은 phoneNumber이상한 것 그것이 더 일반적으로하는 것처럼 주어진 있다는 아마도 phone대부분의 상황에서, 또는 number컨텍스트가 전화기의 연결에 대해됩니다.


2

코드 파일 내에서 일관성을 유지하십시오.

코드 프로젝트 내에서 일관성을 향상시킵니다.

코드 라이브러리 내에서 일관성을 유지하십시오.

우리가 주어진 응집에 더 익숙해 짐에 따라 개념을 나타내는 단어들의 합성이 변한다 .

예를 들어 ...

  • '전화 세트'가 '전화'로 단축되었습니다.
  • '전화'가 '전화'로 단축되었습니다.
  • '전화 번호'가 '전화 번호'로 계약되기도했습니다.
  • '전화 번호'는 곧 '전화 번호'가되었습니다.
  • 'phonenumber'는 종종 'phone'으로 단축됩니다.
  • '휴대 전화'또는 '휴대 전화'가 오늘날 일반적으로 사용되고 있습니다
  • '집 전화'및 '회사 전화'도 곧 일반화 될 수 있습니다.

StackExchange 맞춤법 검사기는 마음에 들지 않습니다. 위 문장의 끝에있는 '전화 번호'는 문제가 없었지만, 문장의 시작 부분에 대문자로 표시되어 있습니다 (대문자 또는 아님).

대부분의 모든 사람들이 언어에 관해서는 결코 할 수없는 일을하기위한 "한 가지 올바른 방법"이 있기를 원합니다. 프로젝트를 마칠 때마다 사용량이 변경되었을 수 있습니다. 확실히 당신의 이해와 방법 /et.al의 기능이 변경되었을 것입니다. 아마 바뀌었을 것입니다. (이 경우 이름을 적절히 변경해야합니다.)


-1

엄격하게 기술적 인 미국 관점에서 xxx-yyy-zzzz는 일반적으로 "전화 번호"로 생각되는 것입니다. xxx 부분은 지역 번호라고하며, yyy 부분은 교환하고 zzzz를 숫자라고합니다.

"phonenumber"는 복합어 (아직)가 아니기 때문에 하나가된다면, 그것이 의도 한 것 이외의 것을 잘못 참조 할 것입니다. 실제 전화 시스템으로 무엇이든 할 것입니다. 7 자리에는 phoneExchangeNumber를, 10 자리 버전에는 phoneACExchangeNumber를 사용합니다.


1
이것은 3 년 전에 게시 된 이전의 답변에서 제시 되고 설명 된 내용에 비해 실질적인 내용을 제공하지 않는 것 같습니다
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.