Công ước đặt tên Java với các từ viết tắt [đã đóng]


218

Tên chính xác cho lớp Java sau: DVDPlayerhoặc là DvdPlayergì?


93
Tôi ghét từ viết tắt. DigitalVersatileDiscPlayerlà con đường phía trước.
Tom Hawtin - tackline

7
+1 cho Tom cho trò đùa. Tôi thấy câu hỏi này hữu ích nếu "chính xác" được diễn giải lại thành "tiêu chuẩn" hoặc "tiêu biểu nhất". Câu trả lời được chấp nhận là tuyệt vời!
Jon Coombs

6
Đối với tôi thật có ý nghĩa khi nghĩ về những từ viết tắt như một từ duy nhất và như vậy tôi tuân theo quy ước và sử dụng DvdPlayer.
Daniel

7
Hướng dẫn về phong cách có những điều sau đây để nói về nó: "Định dạng một từ viết tắt dưới dạng một từ nếu nó là một phần của tên lớp dài hơn." , đó DvdPlayerlà cách để đi. (Và, đối với Tom, "Sử dụng toàn bộ từ và tránh sử dụng chữ viết tắt trừ khi chữ viết tắt được sử dụng rộng rãi hơn dạng dài." Và tôi nghĩ "DVD" được sử dụng rộng rãi hơn "Đĩa đa năng kỹ thuật số" :-)
aioobe

Bạn chắc chắn có nghĩa là "Discus", phải không? :)
Ville Oikarinen

Câu trả lời:


237

Vì có vẻ như câu trả lời là không có tiêu chuẩn duy nhất cho điều này trong Java, nên tôi muốn lưu ý rằng Nguyên tắc thiết kế .NET Framework chỉ định điều này.

Bây giờ trước khi đánh tôi vì lạc đề, xin hãy nhớ rằng các hướng dẫn đặt tên lớp cho Java và .NET Framework khá giống nhau, điều này làm cho các hướng dẫn .NET hữu ích như một tài liệu tham khảo thuyết phục.

Quy tắc chung

Cả hai hướng dẫn chỉ khuyến nghị sử dụng các từ viết tắt khi từ viết tắt được biết đến rộng rãi và được hiểu rõ. DVD hoặc XML là những ví dụ tuyệt vời về điều này, vì trong khi bạn sẽ nhận ra chúng ngay lập tức, sẽ mất một chút thời gian để nhận ra phiên bản mở rộng.

Các từ viết tắt

Nguyên tắc .NET Framework khuyên bạn không nên sử dụng các từ viết tắt (trái ngược với các từ viết tắt), ngoại trừ hai từ viết tắt phổ biến 'ID' và 'OK' có thể được sử dụng trong các định danh. Khi sử dụng chữ viết tắt, trường hợp hỗn hợp Idluôn được sử dụng ngoại trừ từ đầu tiên của mã định danh camelCase (trái ngược với mã định danh PascalCase).

Trong Java quy ước này chỉ được tuân theo một số thời gian. Hãy xem cách trộn lẫn các cách viết getIDgetIdtrong JCL. (Di chuyển giữa chừng trang đó). Trong phiên bản Java 8 , mặc dù getIdđược sử dụng ngày càng nhiều, trong đó gợi ý các quy ước PascalCase được ưa chuộng hiện nay. Tốt nhất là chỉ nên tránh viết tắt hoàn toàn khi có thể.

Từ viết tắt ngắn

Nguyên tắc .NET Framework nói rằng hai từ viết tắt như 'IO', nên có cùng một trường hợp cho cả hai chữ cái. Vì vậy, đối với mã định danh PascalCase (như tên lớp) bạn sẽ nhận được DBRate, trong khi đối với mã định danh camelCase (như biến cục bộ) bạn có thể có ioChannel.

Đây chắc chắn cũng là quy ước phổ biến trong Java.

Từ viết tắt dài

Các hướng dẫn của .NET Framework khuyến nghị các từ viết tắt ba chữ cái hoặc dài hơn sử dụng trường hợp hỗn hợp cho các định danh PascalCase và camelCase, ngoại trừ từ đầu tiên của định danh camelCase. Do đó, đối với một tên lớp bạn có thể có XmlDocument, trong khi một biến cục bộ có thể được đặt tên httpRequest.

Quy ước này không phải lúc nào cũng được tuân theo trong Java. Bốn từ viết tắt ký tự dường như thường sử dụng trường hợp hỗn hợp, nhưng ngay cả JCL cũng không nhất quán về ba từ viết tắt. Hầu hết trong số chúng dường như đều là chữ hoa, như 'URL', 'XML', 'SQL' và 'DOM', nhưng có một số trường hợp ngoại lệ như 'Jar'.

Phần kết luận

Đối với Java:

Đối với 4+ chữ viết tắt, sử dụng trường hợp hỗn hợp. Thư viện tiêu chuẩn thực hiện điều này, và nó chỉ có ý nghĩa tốt.

Đối với các từ viết tắt 3 chữ cái, bạn có thể sử dụng tất cả chữ hoa như JCL hoặc bạn có thể sử dụng trường hợp hỗn hợp như .NET Framework. Dù bằng cách nào, hãy kiên định.

Đối với 2 từ viết tắt, sử dụng tất cả chữ hoa.

Đối với chữ viết tắt 2 chữ cái, Java không thực sự có một tiêu chuẩn, nhưng tôi khuyên bạn nên sử dụng trường hợp hỗn hợp, trừ khi tính nhất quán với các tên khác sẽ làm cho tất cả chữ hoa trông đẹp hơn.


11
cũng đặt, nỗ lực tốt đẹp!
Eliran Malka

1
Tôi thích điều này, ngoại trừ việc nó không nhất quán để có CAPS cho các từ viết tắt 3 và 2 chữ cái. (Có lẽ tôi là người theo chủ nghĩa thuần túy, nhưng hãy xem câu trả lời được chấp nhận vì lý do thực tế. Thêm vào đó, có yếu tố nhầm lẫn.)
Jon Coombs

1
@JCoombs: Chà, sự không nhất quán của 2 chữ cái là một cái gì IpAddressđó trông có vẻ khủng khiếp với nhiều người. Cá nhân khi tôi cần viết mã Java, tôi đi với trường hợp hỗn hợp cho các từ viết tắt 3 chữ cái, chỉ để lại hai chữ cái là một trường hợp đặc biệt.
Kevin Cathcart

5
Nếu tên lớp của bạn có nhiều từ viết tắt hai chữ cái liền kề thì sao? Bất kể bạn làm gì, nó sẽ trông 'sai' - USGFCharset, UsGfCharset, US_GFCharset ...
Kevin

3
Câu trả lời thực sự tốt. Nhưng cá nhân tôi không thích ý tưởng của các hướng dẫn .NET về cách đặt tên khác nhau tùy thuộc vào độ dài của các từ viết tắt và liệu nó có phải là viết tắt hay không. Ai thực sự quan tâm và kiểm tra độ dài của từ viết tắt? Hoặc nếu nó là một từ viết tắt? Tôi thích một quy tắc chăn để đặt tên. Vấn đề xảy ra khi sử dụng các thư viện của bên thứ 3 với các quy ước khác nhau từ bất kỳ quy tắc nào bạn chọn đi theo.
Amani Kilumanga

98

Không có câu trả lời "đúng". Chỉ cần một tập hợp các thực tiễn và quy ước chơi tốt hơn với các công cụ khác của bạn.

Vì vậy tôi thích DvdPlayer. Nó hữu ích hơn vì trong Eclipse bạn có thể thực hiện Ctrl+ Shift+ Tvà chọn các lớp theo chữ cái đầu tiên của mỗi từ.

văn bản thay thế


19
oooo đó là một mẹo nhật thực hữu ích. Cảm ơn!
Peter Perháč

1
(+1) một mẹo hay. trả lời câu hỏi cho tôi :-)
Asaf

2
Chỉ cần "SIO" là đủ để tìm thấy lớp đó.
Finnw

7
Điều này cũng hoạt động ở nơi khác trong Eclipse - ví dụ tự động hoàn thành. Có một phương thức / biến có tên 'myDvdCoverImage' không? - chỉ cần gõ mDCI Ctrl + Space
teabot

3
cũng có một số phím tắt đã được đặt, như sysout Ctrl + Space, cung cấp cho bạn System.out.println. tương tự với (thử) và (cho)
medopal

50

Tôi đã thấy cả hai được sử dụng trong tự nhiên và Sun dường như đi DVDPlayertheo phong cách. DvdPlayerMặc dù vậy, tôi thích bởi vì theo cách đó thì rõ ràng ranh giới từ ngay cả khi có nhiều từ viết tắt liên tiếp, như trong HTTPURLConnection.


3
Nó cũng nhanh hơn để gõ theo cách này.
Ates Goral

6
Tôi nghĩ "DVDPlayer" làm cho ranh giới từ rõ ràng hơn. "Dvd" không phải là một từ, trong khi "DVD" là từ viết tắt của từ "Đĩa đa năng kỹ thuật số". Vì vậy, ranh giới từ thực tế trong "Đầu DVD" là "D", "V", "D" và "P".
Greg Brown

18
@GregBrown: DVD là một đĩa có lỗ, không ai ngoại trừ bạn biết tên đầy đủ của nó, không quan tâm đến nó. Và nó thực tế hơn nhiều để sử dụng DvdPlayer.
Igor Rodriguez

4
@GregBrown: Trên thực tế, ít nhất là thực tế hơn trong Eclipse, trong đó nhận dạng trường hợp lạc đà là một từ viết tắt: tức là với DvdPlayer, bạn có thể nhập "DP" và nhấn Ctrl + 1 để có lựa chọn chọn DvdPlayer, nhưng nếu bạn đã có DVDPlayer bạn sẽ phải gõ "DVDP". Và thậm chí còn khó chịu hơn nếu nó dài hơn. Tôi không muốn có một UNESCOConnector trong mã của mình. Dù sao đó là một vấn đề của sự lựa chọn.
Igor Rodriguez

21
Một ví dụ điển hình khác là HTTPSID - ý tôi là HTTP SID hoặc HTTPS ID ... Do đó, nó nên được viết tương ứng là httpSid hoặc HttpsId để giải thích ý nghĩa tốt hơn.
Oz Edri

37

Tôi muốn định nghĩa các thể hiện riêng lẻ của các lớp theo cách sau:

Catalogue catalogue;
Person person;

Vì vậy, nếu tôi sử dụng DVDPlayer, tôi sẽ gọi một ví dụ về điều đó là gì? dVDPlayer? Do đó tôi sẽ chọn DvdPlayertên lớp, vì vậy bạn có thể đặt tên cho các thể hiện như thế nào dvdPlayer.


16
Có chuyện gì với bạn DVDPlayer dvdPlayer;vậy?
azz

9
@DerFlatulator Điều gì không sai với nó? Cho dù bạn đến bằng cách nào dvdPlayer, khi bạn quay lại, bạn sẽ nhận được DvdPlayer.
maaartinus

5
@DerFlatulator: đó là một câu hỏi về tự động hóa khi chuyển đổi từ UpperCamelCase sang lowCamelCase: Tôi gặp vấn đề khi tự động ánh xạ Hibernate sang sn_case: DvdPlayer -> dvd_playernhưng DVDPlayer -> d_v_d_player. Không có cách nào để tự động hóa DVDPlayer thành dvd_player.
pdem

3
@DerFlatulator: được rồi, cảm ơn vì đã trả lời, nó đã hoạt động trong trường hợp này. Nhưng tôi vẫn bị thuyết phục với ký hiệu "DvdPlayer": còn DVDRPGPlayer thì sao? Nó nên được chuyển đổi thành dvdRpgPlayer chứ không phải dvdrpgPlayer.
pdem

2
Cũng xem xét getters và setters của bạn: getDvdPlayer()hoạt động tốt hơn getDVDPlayer(), ví dụ, khi được sử dụng với JSP EL (ví dụ, foo.dvdPlayer). Và nếu bạn đặt tên cho getters của bạn bằng chữ thường trong các từ viết tắt, tốt nhất là giữ tên lớp của bạn giống nhau để thống nhất và dự đoán.
daiscog

33

Một số ví dụ từ các lớp JavaSE, apache commons và spring:

  • HttpURLConnection
  • HTTPAddress
  • UrlPathHelper
  • AopProxy
  • ISBNValidator

Vì vậy - nó không thực sự quan trọng.


3
Đã đồng ý. Chỉ cần nhất quán trong cơ sở mã của bạn.
JARC

2
Tôi sẽ không nói nó không quan trọng, mặc dù điều này không thực sự là một vấn đề lớn. Một số sử dụng thấy các tiêu chuẩn thường được ưa thích rất hữu ích, ngay cả khi không phải ai khác cũng nhất quán về việc tuân theo chúng.
Jon Coombs

Tôi có nên thích SRShơn SoftwareRequirementSpecification?
Trì Tupe


10

Như những người khác đã chỉ ra, đó là một phong cách khác nhau giữa các dự án. Các dự án của Google như Guava và GWT thích DvdPlayerphong cách này.

https://google.github.io/styleguide/javaguide.html#s5.3-camel-case


Một liên kết hội nghị Google tổng quát hơn cho DvdPlayerphong cách: google-styleguide.googlecode.com/svn/trunk/iêu
Stan Kurdziel

1
Các liên kết trong câu trả lời đã chuyển sang gwtproject.org/makinggwtbetter.html#codestyle vào liên kết @StanKurdziel đề cập đã chuyển sang google.github.io/styleguide/javaguide.html#s5.3-camel-case
Jeroen Wiert Pluimers

8

Từ tài liệu java mặt trời :

Tên lớp nên là danh từ, trong trường hợp hỗn hợp với chữ cái đầu tiên của mỗi từ nội bộ được viết hoa. Cố gắng giữ cho tên lớp của bạn đơn giản và mô tả. Sử dụng toàn bộ từ - tránh các từ viết tắt và viết tắt (trừ khi chữ viết tắt được sử dụng rộng rãi hơn nhiều so với dạng dài, chẳng hạn như URL hoặc HTML).


14
Điều đó không thực sự nói bất cứ điều gì về việc nó nên là trường hợp trên hay lạc đà.
DD.

@DĐ. Tôi nghĩ với tôi, các điểm "được sử dụng rộng rãi hơn" để sử dụng tất cả các chữ hoa cho các từ viết tắt có liên quan (HTTP, GET, v.v.) so với một số từ dành riêng cho doanh nghiệp ngẫu nhiên như DVD, MRI, MAGA, v.v.
goelakash

3

DVDPlayerlà tiêu chuẩn, nhưng DvdPlayerkhông phải là hiếm.

Bạn thường xuyên hơn không nhìn thấy getId. Điều đó có lẽ là do suy nghĩ ID là sự rút ngắn của "Danh tính". Nó thực sự là tên viết tắt của Chứng minh thư.

HttpURLConnectionthường được đưa ra như một ví dụ về quy ước hỗn hợp. Tuy nhiên, "http" được sử dụng làm tên giao thức trong URL phải là chữ thường (mặc dù chữ hoa thường được chấp nhận).


2
Tôi không nghĩ rằng đây thực sự là một tiêu chuẩn, nhưng nó có lẽ là phổ biến nhất.
b.roth

Đó là trong Tiêu chuẩn mã hóa Sun Java, IIRC. Mặc dù không có trong JLS.
Tom Hawtin - tackline

7
HyperTextTransferProtocolUniformResourceLocatorConnection
flybywire

2
Tôi khá chắc chắn rằng hầu hết mọi người sử dụng ID làm tên viết tắt của Mã định danh ... tức là trong cơ sở dữ liệu, ID bảng đang đề cập đến mã định danh bảng cho tài liệu nhận dạng.
DD.

9
DVDPlayer chắc chắn không phải là tiêu chuẩn; ngay cả JDK cũng không nhất quán trong cách tiếp cận của họ đối với điều này.
Kevin Bourrillion

0

Không có "chính xác", chỉ có sở thích ở đây.

Sun nhất quán trong cách họ đặt tên các lớp có chứa "URL" và "HTML", nhưng tôi thấy HTTP sử dụng cả mũ và vỏ lạc đà trong javadocs.

Cá nhân, tôi thích DvdPlayer hơn.


Tôi tin rằng tên giao thức HTTP trong URL nên được viết bằng chữ thường (mặc dù nó có thể được các trình duyệt chấp nhận viết hoa).
Tom Hawtin - tackline
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.