Cách viết vỏ lạc đà cho các từ như Tiếng phonenumber, Xe gắn máy, Bước sóng bước sóng, v.v.


75

Tôi đang gặp vấn đề trong việc hiểu cách áp dụng cú pháp camelCase cho một số tên biến của mình.

Ví dụ, làm thế nào tôi nên viết chính xác một từ như "phonenumber" trong trường hợp lạc đà? Là nó phoneNumberhay phonenumber? Tương tự với "tên người dùng", là nó usernamehay userName?

Tôi nghĩ rằng nó không giống đúng với trường hợp lạc đà như motorCycle, passWord, sunDay, setUphay waveLengthvì đây là mỗi chỉ một từ. Tôi nghĩ đó có thể là lý do tại sao nó được gọi hashMapnhưng cũng hashtabletrong trường hợp lạc đà không có vốn trong trường hợp cuối cùng bởi vì hashtable là một từ trong khi bản đồ băm là hai từ.

Nhưng nếu chiếc xe máy có một màu thì đó có phải là motorcycleColormột từ được ghép lại không? Là đúng hay nó phải được phoneNUmber, waveLength, sunBlockvà thậm chí sunDaycho ngày chủ nhật trong tuần?

Ví dụ, tại sao phương thức được gọi getISOCountriestrong khi nó nói HttpHeadersví dụ: không rõ cái gì trở thành chữ thường nếu chúng ta có một phương thức như String camelCaseString = dog.toCamelCase()hoặc interface CamelCase.

Liên quan: https://english.stackexchange.com/questions/889/when-should-compound-words-be-written-as-one-word-with-hyphens-or-with-spaces


7
Đối với những trường hợp thực sự khó khăn để bạn biết nếu cụm từ hai từ là từ ghép, hãy chọn viết hoa và gắn với nó. Như với hầu hết các quy ước mã hóa, việc nhất quán trong một dự án là điều quan trọng nhất.
Kevin

2
Câu hỏi tuyệt vời, tôi luôn tự hỏi làm thế nào để viết "fileName" (và "tên tệp" sai). Tôi nghĩ từ này được viết khác nhau từ lập trình viên đến lập trình viên ...
Ray

3
@PacMani Bạn có thể thích cuộc thảo luận ở đây !
Jason C

4
@ 909Niklas Tôi sẽ bỏ "tên" hoàn toàn càng nhiều càng tốt. Chỉ cần sử dụng "đường phố" Nếu đó là một chuỗi, đó là một tên trừ khi điều đó gây bất lợi hoặc khó hiểu. usernameđó là cái gì, đó là một dấu hiệu cuộc gọi, không phải là "tên người dùng", vì vậy nó giống như xe máy hơn là FirstName hoặc LastName (cần được camelcasing)
Peter Turner

2
@PeterTurner Một số lập trình viên sẽ nói rằng đó streetphải là một lớp và namemột trong các thuộc tính / thành viên dữ liệu của nó.
JAB

Câu trả lời:


173

Bạn nên viết hoa chữ cái sau khi "thường" sẽ là một khoảng trắng (khi bạn sẽ viết một chữ cái thay vì mã nguồn). Giả định đầu tiên của bạn là chính xác:

  • Đó là "xe máy", không phải là "chu kỳ động cơ", vì vậy biến của bạn nên được đặt tên motorcyclechứ không phải motorCycle.
  • Đó là một "bản đồ băm", vì vậy bạn đi cùng hashMap, không phải hashmap.
  • "Chủ nhật" là một từ -> sunday, không phải sunDay.
  • Trong khi "ngày trong tuần" thì dayOfWeekkhông dayofweek.

4
Đối với những gì nó có giá trị, nhóm của tôi và tôi thường sử dụng hashmapnhư một từ duy nhất, mặc dù trớ trêu thay chúng tôi không làm tree map. nhún vai
corsiKa

1
Chà, xe máy là một chút của một trường hợp cạnh (trên thực tế, ban đầu nó là một chu kỳ động cơ, mặc dù bây giờ đó là một cái gì đó khác nhau); honeyBee(và không honeybee, trên thực tế không phải là "ong mật" mà là "ong mật"), và butterfly.
orome

3
Các phi adressed setUptrường hợp là một trường hợp cạnh tuy nhiên, đó là một từ duy nhất, nhưng JUnittrong lịch sử có nó cố khởi tạo tên setUp.
TC1

23
@ TC1 Trên thực tế, "setup" là một danh từ , không bao giờ là động từ. "Thiết lập" hình thức chính xác của hành động. JUnitCó nó đúng, phần còn lại của chúng tôi là trường hợp cạnh. :)
Jason C

3
@JasonC Cảm ơn, cuối cùng cũng có lý do tại sao phần đối tác là tearDown: D
TC1

44

Phần 1
Tôi nghĩ điều khiến bạn vấp ngã là một số ví dụ của bạn là từ ghép , trong khi những ví dụ khác thì không.

  • số điện thoại // không phải là từ ghép
  • xe máy // từ ghép
  • bước sóng // từ ghép
  • kem chống nắng // từ ghép
  • Chủ nhật // từ ghép *
  • màu xe máy // từ ghép được sử dụng với một từ không ghép.

Từ ghép không tuân theo ký hiệu trường hợp lạc đà cho từ thứ hai trong từ ghép.

Vì vậy, nó motorcyclevà không motorCycle.

Nhưng "số điện thoại" không phải là một từ ghép và nó sẽ theo ký hiệu trường hợp lạc đà. tức phoneNumber.

Và điều đó dẫn đến : motorcycleColor.

Nếu tôi không thể nhớ lại nếu một từ có thực sự là một từ ghép hay không, tôi chắc chắn sẽ tìm nó trong từ điển.

Phần 2
Hai ví dụ của bạn khó hơn một chút.

  • bản đồ băm
  • bảng băm

Chúng khó khăn vì một số người sẽ đánh vần chúng là "hashmap" và "hashtable". Theo từ điển tôi vừa kiểm tra, chúng là những từ riêng biệt và không phải là từ ghép. Vì vậy, trường hợp lạc đà chính xác sẽ là hashMaphashTable. Không phải mọi đội đều tuân theo quy ước đó, vì vậy bạn cần hỏi đồng đội của mình xem họ thích gì và sau đó gắn bó với điều đó. Tính nhất quán là quan trọng trong trường hợp này hơn những gì một từ điển có thể nói là chính xác.

* Một số người sẽ tranh luận về ngày Chủ nhật là một từ ghép vì các ngày khác trong tuần thì không, nhưng vì mục đích của câu hỏi này, tôi sẽ bỏ qua vấn đề đó. Đó là cách dễ nhất để coi như một từ ghép và do đó không có trường hợp lạc đà.


6
Những ngày khác trong tuần đều hợp chất quá: "Monday" <- ngày mặt trăng, thứ ba <- ngày Tiw của, Thứ Tư <- ngày Woden của, thứ năm <- ngày của Thor, Thứ Sáu <- ngày Frigg của, Thứ Bảy <- Saturn ngày
kevin cline

6
@kevincline: Những hình thức tên thời đó có lẽ được coi là cổ xưa, vì vậy không thực sự được tính cho các mục đích thực tế. ... Trừ khi bạn thực sự viết mã trông giống như if (currentDay == thorsDay) {...Hmm ... các thư viện ngày quá tệ không có tùy chọn định dạng khi bạn muốn lấy tên đầy đủ của ngày trong tuần.
Thất

15
@FrustratedWithFormsDesigner: vấn đề là trong cách sử dụng hiện đại, Chủ nhật là một từ ghép với cùng một mức độ mà Thứ Hai là: hoàn toàn không. Đó chỉ là một tai nạn mà "Mặt trời" trong "Chủ nhật" có thể đứng một mình, trong khi "Ngày mặt trăng" được rút ngắn thành "Thứ hai"
kevin cline

6
Tốt hơn nữa, sử dụng tên tốt hơn cho các biến của bạn so với hashMap hoặc hashTable. Đó là một con đường trơn trượt dẫn đến dòng mã tuyệt vời này:HashMap hashMap = new HashMap();
Eric Andres

8

Như những người khác đã chỉ ra, trường hợp lạc đà được sử dụng khi nối các từ. Không sử dụng vỏ lạc đà trong một từ tiếng Anh. Vấn đề là xác định hợp chất nào là từ đơn. Còn lại, các lập trình viên sẽ đi đến các quyết định khác nhau tùy thuộc vào kiến ​​thức tiếng Anh của họ. Điều này dẫn đến sự không nhất quán trong cách viết hoa, gần như gây khó chịu như lỗi chính tả.

Để ngăn chặn điều này, các lập trình viên nên sử dụng một tài liệu tham khảo tiêu chuẩn (ví dụ dictionary.com ) khi họ không chắc chắn về chính tả hoặc viết hoa. Mặc dù vậy, nếu tính nhất quán trong việc đặt tên là quan trọng đối với dự án của bạn, thì không có sự thay thế nào cho việc xem xét mã.

Chọn một tham chiếu duy nhất cho dự án của bạn sẽ giải quyết hầu hết các đối số về viết hoa và chính tả. Có một số hợp chất như Hashtable không có trong từ điển, nhưng được viết hoa dưới dạng các từ đơn trong API Java và C #. Bạn sẽ muốn đưa ra quyết định trên toàn dự án về những điều đó. Trong Java, đó là "HashMap" nhưng "Hashtable". IMO "Hashtable" rõ ràng không chính xác; nó không bao giờ xuất hiện dưới dạng một từ trừ một tên trong API.


4

Cách đơn giản nhất để làm trường hợp lạc đà là phân định từ.

Ví dụ từ câu hỏi của bạn:

  • số điện thoại: số điện thoại
  • xe máy: xe máy
  • chủ nhật: chủ nhật
  • bước sóng: bước sóng

Nếu bạn không chia nó thành hai từ, bạn cũng không nên sử dụng vỏ lạc đà trên đó. Mặt khác, bạn đang sử dụng nó trên các âm tiết và nó trông thật ngớ ngẩn

  • auxIlIArY (Đây là một từ có 5 âm tiết;

5
Số điện thoại không phải là từ riêng của nó, hãy đặt nó vào google dưới dạng một từ duy nhất, nó sẽ vui vẻ tra cứu mọi thứ có "Số điện thoại" không phải là số điện thoại. Và thiết lập không phải là hai từ, mật khẩu cũng không.
Jeff Langemeier

6
@JeffLangemeier Một lời ngụy biện rất nhỏ: Cài đặt thiết lập là một danh từ, trong khi đó, thiết lập ra là một động từ. Do đó, nếu bạn có một đối tượng thể hiện cách thức một cái gì đó được thiết lập thì nó sẽ được gọi setup, trong khi nếu bạn có một chức năng để thiết lập một cái gì đó thì nó sẽ được gọi setUp.
bdesham

2
@bdesham Tôi nhận ra điều đó, nhưng tôi sẽ tránh xa setUp, vì một động từ tốt hơn, ít mơ hồ hơn sẽ được khởi tạo, tôi thực sự hoàn toàn quên mất phiên bản thiết lập động từ.
Jeff Langemeier

1
Tôi nghĩ rằng cái bắt đầu bằng "wa" có thể wavelengthhoặc waveLengthtùy thuộc vào việc giá trị trong câu hỏi có liên quan đến tốc độ lan truyền chia cho tần số hay không, hay liệu nó có liên quan đến "độ dài" (không nhất thiết là khoảng cách) của một loại sóng nào đó . Ví dụ: biến thư viện tổng hợp âm thanh cho số lượng mẫu được liên kết với sóng sẽ không wavelengthnhưng waveLength.
supercat

2
@kevincline: Trong các công cụ tổng hợp âm thanh, thông thường có các bảng sóng chứa một hoặc nhiều mẫu sóng. Khi phát lại đến cuối bảng, nó sẽ quay trở lại từ đầu (đối với các động cơ đơn giản) hoặc đến một số điểm khác trong sóng. Chắc chắn, WaveLengthbản thân nó sẽ hơi mơ hồ trong bất kỳ trường hợp nào ngoại trừ các kịch bản đơn giản nhất [có đề cập đến kích thước bộ đệm hoặc độ dài của phần lặp] nhưng các từ hoàn toàn có thể xuất hiện trong một tên dài hơn.
supercat

4

Đây là nơi phức tạp với tiếng Anh đơn giản gây ra cách người ta sau đó lạm dụng tiếng Anh để phù hợp với các quy tắc không gian trắng của mã thông báo trong bối cảnh lập trình.

Trong số các từ ví dụ bạn đưa ra, hầu hết tất cả đều là hợp chất. Chủ nhật không, vì trong khi nó có nguồn gốc từ một hợp chất, nó đã làm từ rất lâu đến nỗi nó hiếm khi được coi là một thứ, đặc biệt là khi nó dành riêng cho mặt trời là một sự tò mò lịch sử hơn là một phần mạnh mẽ của tôn giáo và văn hóa triển vọng của những người nói tiếng Anh.

Và trong tiếng Anh, ba cách chính để viết một hợp chất là mở (có khoảng trắng giữa hai từ), gạch nối và đóng (không có khoảng trắng hoặc dấu gạch nối giữa hai từ). Và mặc dù có một số quy tắc về gạch nối các hợp chất mở trong một số trường hợp nhất định, nhưng thực sự không có nhiều quy tắc vững chắc để biết dạng nào được sử dụng cho một hợp chất nhất định ngoài việc nhìn thấy những gì người khác làm, và vẫn có những lúc bạn sẽ tìm thấy hai hoặc thậm chí cả ba hình thức ( eggbeater , eggbeaterbeater trứng ví dụ).

Ở đây, số điện thoại hầu như luôn được viết mở, vì vậy nó nên được coi là hai từ.

Và khi giới hạn liên kết để tạo thành mã thông báo, khoảng trắng hoặc dấu gạch nối sẽ bị xóa và từ thứ hai và từ tiếp theo được viết trong trường hợp tiêu đề, do đó phoneNumberhoặc PhoneNumberphù hợp với quy ước của bạn.

Điều phoneNumbercó vẻ kỳ lạ có lẽ là nó thường được đưa ra như phonetrong hầu hết các bối cảnh, hoặc numberkhi bối cảnh là về một kết nối điện thoại.


2

Đảm bảo tính nhất quán trong tệp mã.

Thúc đẩy tính nhất quán trong dự án mã.

Thích sự nhất quán trong thư viện mã.

Việc ghép các từ để biểu thị các khái niệm thay đổi khi chúng ta trở nên quen thuộc hơn với sự kết tụ nhất định .

Ví dụ...

  • 'bộ điện thoại' trở nên rút ngắn thành 'điện thoại'
  • 'điện thoại' được rút ngắn thành 'điện thoại'
  • 'số điện thoại' đôi khi được ký hợp đồng thành 'số điện thoại'
  • 'số điện thoại' sớm trở thành 'số điện thoại'
  • 'số điện thoại' thường được rút ngắn hơn nữa chỉ là 'điện thoại'
  • 'điện thoại di động', hoặc chỉ 'tế bào' đang được sử dụng phổ biến hiện nay
  • 'homPhone' và 'điện thoại công việc' cũng có thể sớm trở nên phổ biến

Lưu ý rằng trình kiểm tra chính tả StackExchange không thể tạo nên ý tưởng của nó. 'Phonenumber' ở cuối câu trên là ổn nhưng nó đánh dấu câu ở đầu câu (viết hoa hoặc không viết hoa).

Hầu như tất cả mọi người đều mong muốn có "một cách đúng đắn" để làm mọi thứ, khi nói đến ngôn ngữ, điều đó không bao giờ có thể. Khi bạn hoàn thành dự án của mình, việc sử dụng có thể sẽ thay đổi. Chắc chắn sự hiểu biết của bạn sẽ thay đổi và chức năng của phương thức / et.al. có lẽ cũng sẽ thay đổi (Trong trường hợp đó, có lẽ bạn nên thay đổi tên một cách thích hợp.)


-1

Từ góc độ kỹ thuật nghiêm ngặt (Hoa Kỳ), trong đó xxx-yyy-zzzz là những gì bạn thường nghĩ là "số điện thoại", phần xxx được gọi đúng là mã vùng, phần yyy được gọi đúng là trao đổi, và zzzz được gọi đúng là số.

Vì không chỉ "phonenumber" không phải là một từ ghép (nhưng), nhưng nếu nó trở thành một từ, nó sẽ tham chiếu không chính xác một cái gì đó ngoài ý định của người tạo ra nó, tôi sẽ nói rằng cú pháp camelCase sẽ yêu cầu phoneNumber cho bất kỳ biến nào tham chiếu đến nó, nhưng nếu bạn sẽ làm bất cứ điều gì với hệ thống điện thoại thực tế, tôi sẽ sử dụng phoneExchangeNumber cho bảy chữ số và phoneACExchangeNumber cho các phiên bản mười chữ số.


1
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong câu trả lời trước đó đã được đăng hơn 3 năm trước
gnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.