Biến nên được đặt tên Id hoặc ID? [đóng cửa]


126

Đây là một chút mô phạm, nhưng tôi đã thấy một số người sử dụng Idnhư trong:

private int userId;
public int getUserId();

và những người khác sử dụng:

private int userID;
public int getUserID();

Là một trong những cái tên tốt hơn so với cái khác? Tại sao? Tôi đã thấy điều này được thực hiện rất không nhất quán trong các dự án lớn. Nếu tôi đặt ra một tiêu chuẩn mà hầu hết mọi người sẽ quen thuộc? Đó là tiêu chuẩn thông thường?


40
Tính nhất quán là điều quan trọng nhất. Có thể là trường hợp lạc đà, hoặc gạch dưới hoặc không có gì. Hãy kiên định.

38
Nhìn vào API XML của ngôn ngữ của bạn để xem cách chúng thực hiện. Tên lớp Java như SAXParserDOMException, tên lớp .NET thích XmlDocument. Dựa vào đó, tôi sẽ nói "ID" trong Java, "Id" trong C #.
luiscubal

1
Nhưng các định danh chữ hoa, theo quy ước, được sử dụng trong Java cho các trường tĩnh, vì vậy tên "ID" cho trường cơ sở không phải là tên tốt nhất. Và có sự nhất quán ...
Thủy thủ Danubian

8
Bạn sẽ đặt tên cho các biến EGOSuperEGO? Tôi đã không nghĩ như vậy. ;)
kojiro

4
Gì?! Tính nhất quán? Cuộc chiến thịnh nộ ở đâu?! Thế là xong, tôi tự đề cử mình là người giữ ngọn lửa cú pháp trường hợp lạc đà thiêng liêng và từ đó đồng ý rằng việc thực hiện nó với tất cả các chữ hoa cho các từ đồng nghĩa là dành cho noobs. Ngoài ra, thật đúng khi muốn cuộn giấy vệ sinh từ trên xuống trừ khi bạn có mèo chán và làm những việc lạ, trong trường hợp đó, chúng khó khăn hơn nhiều trong việc làm sáng giấy vệ sinh được cuộn từ dưới lên để có thể chấp nhận dị giáo như vậy đối với chủ mèo. Tôi không biết tại sao tôi lại có nghị định về điều đó. Tôi đoán là người giữ ngọn lửa thiêng của nhà vệ sinh đang bận rộn.
Erik Reppen

Câu trả lời:


56

Quy tắc quan trọng nhất cần tuân theo trong những trường hợp này là tính nhất quán: Làm như mọi người khác làm.

Chẳng hạn, hãy xem API XML của ngôn ngữ của bạn để xem cách chúng thực hiện.

Các lớp tên Java như SAXParserDOMException , các lớp tên .NET như XmlDocument .

Dựa vào đó, tôi sẽ nói "ID" trong Java, "Id" trong C #.

Tuy nhiên, tôi đã thấy rằng Java EE 6 có một chú thích có tên @Id(xem tài liệu ), vì vậy có vẻ như Java coi "Id" chỉ là một từ bình thường.


@Id trỏ đến một tên lớp chú thích, không phải tên biến. Ví dụ sai.
jwenting

3
SAXParser có thể (và may mắn là không) SimpleAPIforXMLParser (hoặc thậm chí SimpleApplicationProgramingInterfaceforExtesibleMarkupL LanguageParser). Mỗi chữ in hoa là bắt đầu của từ. Vì vậy, ngay cả trong java, nó phải là "Id"
user470365

2
@jwenting Vấn đề là tìm hiểu xem "id" được coi là một từ hay giống như hai từ. @Idnói rằng đó là một từ đơn, vì vậy tên biến sẽ là "id".
luiscubal

Số SAX là từ viết tắt trong khi Id thì không.
nalply

8
Bạn nói đúng về việc sử dụng Idtrong C # (và .NET nói chung), nhưng vì một lý do khác. Quy tắc là viết hoa tất cả các chữ cái của từ viết tắt 2 chữ cái (ví dụ IPAddress) và chỉ viết hoa chữ cái đầu tiên của các từ viết tắt dài hơn (như ví dụ về XmlDocumentbạn đã đưa ra). Nhưng IdOklà những ngoại lệ cho quy tắc này, được đề cập cụ thể. Để biết tóm tắt đầy đủ, xem Capitalization Rules for Acronymsphần của Capitalization Conventionsbài viết. Nhưng ngay cả Microsoft cũng phá vỡ quy tắc đó (ví dụ DbConnectionso với DBNull)
Allon Guralnek

110

Kiên định là vua; chọn cái này hay cái kia, nhưng làm nó nhất quán ở mọi nơi

Điều đó nói rằng, tôi thích biến thể đầu tiên, vì nó không vi phạm camelCase (làm như vậy có nghĩa là bạn có hai quy tắc kiểu để nhớ, không chỉ một).

Hai chữ in hoa đôi khi được sử dụng vì điều này , nhưng ID thực sự chỉ là một hình thức ủy quyền Id.


18
Tôi sẽ không thích nó nếu một chương trình máy tính đang cố truy cập id của tôi.
Blrfl

1
userIdOfSender
Sean McS Something 7/213

19
@SeanMcS Something: Ick. SenderUserId
Robert Harvey

5
Mặc dù tôi đồng ý với bạn rằng "Id" là cách ưa thích mà tôi có thể thấy sự nhầm lẫn xuất hiện ở đâu: Trong cuộc trò chuyện hàng ngày, chúng tôi thực sự nói nó như thể đó là từ viết tắt, như trong "tôi có thể xem ID của bạn không?"
500 - Lỗi máy chủ nội bộ

3
Nhìn vào các từ viết tắt khác trong trường hợp lạc đà. Có SoapProtocol, không phải SOAPProtocol. ID là viết tắt của tài liệu nhận dạng, vì vậy tôi không hiểu tại sao nó nên được xử lý theo cách đặc biệt trong trường hợp lạc đà. Điều đó nói rằng, tôi thích userID được sử dụng nhất quán hơn userId và userID được sử dụng không nhất quán trong chương trình của tôi.
Neil

76

TL; DR: Trong ngữ cảnh của các thư viện lớp .NET, Microsoft khuyên bạn nên sử dụng Id. Điều này hơi phản trực giác, vì đây là một ví dụ hiếm hoi của một từ viết tắt được cho phép / khuyến nghị (viết tắt thường được tán thành).

Nếu chúng ta đang nói về các quy ước thư viện lớp C # hoặc .NET, Microsoft có sẵn một số nguyên tắc đặt tên được xác định khá rõ . Họ đã suy nghĩ rất kỹ, với nhiều lời giải thích về nhiều vấn đề khác nhau - thực ra, mọi nhà phát triển nên dành chút thời gian để đọc toàn bộ phần Nguyên tắc thiết kế .

Khi nói đến các từ viết tắt , quy tắc của ngón tay cái là: đối với hai từ viết tắt, bạn có xu hướng giữ chữ hoa (trong trường hợp Pascal được áp dụng), vì vậy, ví dụ IOStreamcó thể là tên của một lớp. Đối với từ viết tắt dài hơn, bạn viết thường phần còn lại của từ viết tắt, ví dụ XmlDocumenthoặc HtmlParser. Đây thực sự là một quy tắc hầu như không rõ ràng (không có sự nhầm lẫn về việc một từ kết thúc và từ tiếp theo bắt đầu, trừ khi bạn đang xâu chuỗi các từ viết tắt hai chữ cái) và bạn nhanh chóng làm quen với nó.

Vì vậy, nó là ID, hay Id? Theo Microsoft, nó có thể không như bạn nghĩ:

Từ viết tắt khác với chữ viết tắt ở chỗ chữ viết tắt rút ngắn một từ. Ví dụ: IDtên viết tắt của mã định danh . Nói chung, tên thư viện không nên sử dụng chữ viết tắt.

Hai chữ viết tắt có thể được sử dụng trong định danh là ID và OK. Trong các định danh vỏ Pascal, chúng sẽ xuất hiện dưới dạng Id và Ok. Nếu được sử dụng làm từ đầu tiên trong mã định danh vỏ lạc đà, chúng sẽ xuất hiện dưới dạng id và ok, tương ứng.

Thông thường, tôi không thực sự chắc chắn khi nào sự khác biệt này bắt đầu xuất hiện trong hướng dẫn, nhưng một vài năm trước (khoảng 3.0 / 3.5) xu hướng đặt tên chung trong các thư viện lớp đã chuyển từ ID sang Id.


1
Đây là hướng dẫn tôi thường làm theo. Vì id là tên viết tắt và không phải là từ viết tắt, tôi luôn thích sử dụng 'Id'.
Toby

Tôi sử dụng ID becuase sau đó nó phá vỡ quy ước và nổi bật là độc nhất, và tôi thích sự trớ trêu của điều đó :)
RhysW

Tôi nghĩ rằng Microsoft đã sai. ID là một chữ viết tắt của Tài liệu nhận dạng, nó không phải là viết tắt của danh tính. (Về mặt ngôn ngữ học, các từ viết tắt có thể phát âm được.)
Tom Hawtin - tackline

@ TomHawtin-tackline Bạn đưa ra một điểm thú vị, mặc dù tôi nghi ngờ rằng nó phụ thuộc vào bối cảnh. Một cái gì đó giống như một tài sản IDNumber trên một đối tượng Person sẽ có ý nghĩa rất lớn, nhưng đối với một XeId có thể đọc là "Tài liệu nhận dạng phương tiện" so với "Định danh phương tiện"? Trong bối cảnh lập trình, định danh là một từ khá phổ biến cho bất kỳ thứ gì xác định duy nhất một thể hiện và tôi cho rằng nó được áp dụng nhiều hơn ở đây.
Daniel B

@DanielB Trong các ngôn ngữ máy tính, ngay cả SQL, "định danh" thường đề cập đến một tên, chẳng hạn như tên của một cột. Thông thường, nó được viết tắt là "nhận dạng". Xe là một ví dụ thú vị bởi vì đã có các chương trình VIN được thiết lập (Số nhận dạng xe). Trong ngữ cảnh lập trình điển hình, "tài liệu" cho một thực thể là một số (thậm chí có thể là một khả năng không thể tha thứ).
Tom Hawtin - tackline

15

Tôi đã đọc một lời giải thích rất tốt trong tài liệu của một số công ước mã hóa. CamelCase phải luôn được sử dụng cho các từ viết tắt và viết tắt, bởi vì nó dễ dàng hơn để phân biệt ranh giới từ (so XmlIdWritervới XMLIDWriter).


12
Đây là một ý tưởng thậm chí tốt hơn để phân biệt ranh giới từ: ranh giới từ thực tế! xml_id_writer.
Kaz

4
@Kaz Vâng, duh! Tuy nhiên, CamelCase được sử dụng theo truyền thống trong một số ngôn ngữ và nó có vẻ không phù hợp để sử dụng dấu gạch dưới trong các tình huống như vậy. Kiên định là vua, như đã đề cập trước đó.
mạ vàng

1
Sử dụng CamelCase chỉ vì các thư viện cốt lõi của một số ngôn ngữ sử dụng nó không nhất quán, mà là sự phù hợp.
Kaz

3
@Kaz: Bạn có những trận chiến lớn hơn để chiến đấu trong cửa hàng của bạn hơn là quy ước mã.
Robert Harvey

2

Như chúng ta có thể thấy trong hàm mặc định của JavaScript getEuityById (); Id được viết trong trường hợp lạc đà ...

Sử dụng 'id' nếu sử dụng với dấu gạch dưới. Ví dụ: user_id

Sử dụng 'Id' nếu đặt tên var mà không có Dấu gạch dưới để phân biệt các từ khác nhau. Ví dụ: userId

Nếu nó là một biến từ duy nhất thì nó phải ở dạng chữ thường hoàn chỉnh, nếu nhiều từ var thì sử dụng trường hợp Camel thấp hơn. Ví dụ: thisIsExample

Nhưng tôi thực sự không khuyến nghị 'ID' tất cả trong CAPS vì chúng tôi thường sử dụng tất cả các giới hạn để xác định CONSTANTS.


Trong đoạn thứ ba của bạn, ví dụ của bạn dường như không khớp với văn bản của bạn?
ruakh

@ruakh thanx .. Chỉnh lưu ..
Sukrit Gupta

0

Đầu tiên, viết tắt eschew.

Thứ hai, nếu chữ viết tắt là siêu nổi tiếng, tôi khuyên bạn nên sử dụng vỏ lạc đà.

Đó là bởi vì bạn không cần phải xem xét ý nghĩa của điều đó. chỉ coi như một từ bình thường

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.