Quy ước đặt tên biến? [đóng cửa]


11

Tôi mới bắt đầu sử dụng ReSharper (cho C #) và tôi giống như mã tìm thấy mùi của nó, nó cho tôi thấy một số điều về văn bản của tôi mà tôi muốn sửa từ lâu (chủ yếu là các quy ước đặt tên biến).

Nó khiến tôi phải xem xét lại một số quy ước đặt tên của mình cho các phương thức và biến thể hiện. ReSharper đề xuất rằng biến thể hiện là trường hợp lạc đà thấp hơn và bắt đầu bằng dấu gạch dưới. Trong một thời gian tôi có nghĩa là để làm cho tất cả các biến cục bộ của tôi trường hợp lạc đà thấp hơn nhưng là gạch dưới cần thiết? Bạn có thấy thoải mái không? Tôi không thích quy ước này nhưng tôi cũng chưa thử nó, ý kiến ​​của bạn về nó là gì?

Điều thứ hai nó nhắc tôi đánh giá lại là các quy ước đặt tên của tôi cho các trình xử lý sự kiện GUI. Tôi thường sử dụng tiêu chuẩn VS của ControlName_Action và các điều khiển của tôi thường sử dụng ký hiệu của Lynn (như một hậu tố, để giúp làm rõ mã mà người dùng có thể nhìn thấy và những gì không phải khi xử lý biến có tên tương tự) vì vậy tôi kết thúc với OK_btn_Click ( ), ý kiến ​​của bạn về điều đó là gì? Tôi có nên chịu thua hội nghị ReSharper hay có những lựa chọn hợp lệ khác không?

Câu trả lời:


19

Bạn có thể sửa đổi ReSharper để sử dụng bất kỳ lược đồ quy ước đặt tên nào bạn sử dụng. Nó khá linh hoạt, bao gồm tùy chỉnh trình xử lý sự kiện, trường, thuộc tính, phương thức với các mức độ truy cập khác nhau, v.v.

Đừng để công cụ xác định tiêu chuẩn của bạn - sử dụng nó để thực thi chính bạn.

Cập nhật: Đã nói rằng, tại nơi làm việc, chúng tôi chủ yếu sử dụng trường hợp lạc đà thấp hơn cho hầu hết những thứ riêng tư - biến, trường và đối số. Trường hợp lạc đà trên cho tên phương thức, hằng và thuộc tính. Trình xử lý sự kiện được đặt tên dựa trên hành động mà chúng đại diện, chứ không phải là thứ gì đó cụ thể đối với điều khiển - ví dụ: HandCustomerContinue thay vì HandleContinueButtonClick. Tôi đã thử lược đồ mặc định ReSharper trong một thời gian và thực sự không bận tâm đến nó, tôi thực sự không bị làm phiền.


Tất nhiên, tôi thực sự thích cách nó giúp tôi kiểm tra các biến cục bộ của mình nhưng tôi tò mò về tiêu chuẩn của người khác, đặc biệt là khi nói đến xử lý sự kiện.
Ziv

Đủ công bằng, tôi đã chỉnh sửa để cung cấp thêm một số chi tiết kinh nghiệm cá nhân.
mjhilton

11
+1 cho "Đừng để công cụ xác định tiêu chuẩn của bạn"
techie007

"Đừng để công cụ xác định tiêu chuẩn của bạn" đã trở thành một trong những trích dẫn lập trình yêu thích của tôi mọi thời đại.
seggy

18

Đối với

nhưng là gạch dưới cần thiết? bạn có thấy thoải mái không?

Một điều tôi thích rất nhiều về việc sử dụng dấu gạch dưới, là nó làm giảm đáng kể việc sử dụng "cái này".

Xem xét:

public void Invoke(int size) {
    _size = size;
}

không có dấu gạch dưới, bạn sẽ phải viết:

public void Invoke(int size) {
    this.size = size;
}

có khả năng giới thiệu lỗi tinh vi của:

public void Invoke(int size) {
    size = size;    // urgh ... no this! 
}

Ngoài ra, việc hoàn tất mã sẽ sạch hơn bởi vì chỉ cần nhập vào dấu gạch dưới, bạn sẽ có được một danh sách chỉ các trường riêng tư, trong khi với "này", bạn sẽ có được một danh sách mọi thứ.

Đối với

thường sử dụng ký hiệu Hungary

Nguyên tắc thiết kế khung: Các quy ước, Idoms và các mẫu cho các thư viện .NET có thể tái sử dụng cho biết:

KHÔNG sử dụng ký hiệu Hungary

Rời khỏi căn phòng nhỏ cho sự mơ hồ :)


Nói một cách chính xác, nếu bạn tuân theo Nguyên tắc thiết kế khung, nó nói rằng các biến được truyền cho các phương thức công khai cũng phải ở dạng chữ hoa, ngoài các tên phương thức :)
phẫu thuật

pzycoman ... bạn có thể vui lòng chỉ cho tôi nơi nó nói điều đó. Nhìn nhanh và tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào về việc sử dụng chữ viết hoa trong các biến được truyền cho các phương thức công khai. Nhưng ví dụ, trên P 118 của phiên bản thứ hai, có một ví dụ về việc các phương thức công khai không sử dụng chữ hoa mà viết thường. "khoảng trống công khai Viết (giá trị uint);"
Bắc Dakotah

10
Trong trường hợp đụng độ tên tôi sẽ nói rằng this.sizenó rõ ràng hơn nhiều _size. Sử dụng tên được gạch dưới không ngăn được lỗi tinh vi, bạn vẫn có thể gán kích thước cho chính nó, mặc dù hy vọng trình biên dịch của bạn sẽ cho bạn biết.
edA-qa mort-ora-y

2
Chắc chắn, bạn luôn có thể chỉ định một cái gì đó cho chính nó. Sự khác biệt chính giữa this.size_sizelà tính nhất quán. Với this.sizenó là tùy chọn. Ví dụ: nếu có một trường riêng khác được gọi name, không cần sử dụng this.namemã, tôi có thể dễ dàng sử dụng namemà không cần bất kỳ xung đột nào. Bởi vì thisđôi khi có thể được sử dụng, và không phải lần khác là lý do tại sao sử dụng thislà kém hơn. Mặt khác, không có sự mơ hồ với _...
Dakotah North

2
Ugh ... tại sao mọi người vẫn sử dụng dấu gạch dưới trong các ngôn ngữ cung cấp một cách tốt hơn.
Giàn khoan

8

Sự nhất quán thực sự là chìa khóa. Điều đó và rõ ràng, tức là đừng khó hiểu hoặc cố gắng lưu gõ bằng cách viết tắt mọi thứ. Intellisense là trình tiết kiệm gõ của bạn, không phải tên khó hiểu (nhưng ngắn!).


2
+1: Chọn một quy ước và bám sát nó. Bất cứ điều gì sẽ làm (ngoại trừ Hệ thống Hungary).
Donal Fellows

Tính nhất quán không phải là điều duy nhất. Ví dụ, ai đó có thể chọn một quy ước đặt tên nhất quán cho mã riêng của họ, nhưng nếu quy ước đó cực kỳ khác với các quy ước đặt tên khác, thì khi sử dụng các thư viện khác ... chắc chắn sẽ có sự không nhất quán. Ví dụ: nếu tôi chọn sử dụng các quy ước đặt tên thuộc tính từ C # trong Java, tôi sẽ không nhất quán với cách viết mã trong tất cả các hệ thống khác. Tôi có thể viết order.Size()(trái ngược với order.getSize()) nhưng vì các thư viện khác sử dụng getters và setters nên mã của tôi sẽ không nhất quán.
Bắc Dakotah

Rõ ràng nên có một số suy nghĩ thông minh đằng sau bất kỳ quy ước nào mà một người quyết định sử dụng, nhưng tính nhất quán là điều quan trọng nhất.
Richard

@DakotahNorth - thật hợp lý khi có một kiểu nhà, nhưng ngoài ra, tính nhất quán là sự cân nhắc quan trọng. Miễn là hội nghị không quá xa lạ, các nhà phát triển bên ngoài / mới có thể dễ dàng chọn nó. Thật vậy, đáng để xuất bản kiểu nhà, để loại bỏ bất kỳ sự không chắc chắn.
cjmUK

7

Trong C # bắt đầu tên được bảo vệ hoặc công khai với dấu gạch dưới là trái với Đặc tả ngôn ngữ chung. Nó chỉ đúng trong trường hợp thành viên tư nhân.

Từ MSDN:

Để tương tác hoàn toàn với các đối tượng khác bất kể ngôn ngữ mà chúng được triển khai, các đối tượng phải chỉ hiển thị cho người gọi những tính năng phổ biến đối với tất cả các ngôn ngữ mà chúng phải tương tác. Vì lý do này, Đặc tả ngôn ngữ chung (CLS), là tập hợp các tính năng ngôn ngữ cơ bản cần thiết cho nhiều ứng dụng, đã được xác định.

Xem: http://msdn.microsoft.com/en-us/l Library / 12a7a7h3.aspx

Ở đây bạn có thể đọc cảnh báo về gạch dưới:

Tên phần tử bắt đầu bằng dấu gạch dưới (_) không phải là một phần của Đặc tả ngôn ngữ chung (CLS), vì vậy mã tuân thủ CLS không thể sử dụng một thành phần xác định tên đó. Tuy nhiên, dấu gạch dưới ở bất kỳ vị trí nào khác trong tên thành phần là tuân thủ CLS.

Xem: http://msdn.microsoft.com/en-us/l Library / 81ed9a62.aspx

Các thành viên được bảo vệ là vấn đề bởi vì bạn có thể kế thừa từ lớp được viết bằng ngôn ngữ khác.

Nhưng có lẽ nó không thành vấn đề trong trường hợp của bạn nếu bạn không cần mã biên dịch CLS.


4

Tôi thích phần dưới. Thoạt nhìn bạn biết rằng biến là một thành viên của lớp và riêng tư.

Chắc chắn IDE có thể cho bạn biết rằng khi bạn di chuột qua nó, nhưng "cái nhìn đầu tiên" không thể đánh bại. Bạn biết đâu là biến cục bộ và biến thành viên chỉ bằng mắt. Không cần di chuyển hoặc di chuột.

Bạn có thể sử dụng từ khóa "này" nhưng _ ngắn hơn để có khả năng quét ngang tốt hơn. Tên mô tả thường được mong muốn nhưng khi một cái gì đó là một quy ước được thiết lập thì tốt hơn là có 1 ký tự. ví dụ sử dụng chữ i làm chỉ mục khi lặp qua một mảng. Vì đó là một quy ước được thiết lập rằng tôi là một chỉ mục, bạn có được lợi ích của khả năng quét mà không có nhược điểm của việc tự hỏi "i" nghĩa là gì.


1

Tôi đồng ý chung với những gì người khác nói, tuy nhiên khi nói đến chuỗi công cụ và công cụ, tôi lười biếng và thích một cuộc sống dễ dàng. Tôi thấy cuộc sống thường dễ dàng hơn khi họ làm theo cách họ đề xuất. Những lý do là

  • Cài đặt dễ dàng hơn (chỉ cần đi với mặc định, thậm chí tôi có thể nhấn Enter 20 lần và thực hiện)
  • Các lỗi thường được xử lý trong các cài đặt mặc định, thường là cấu hình bí truyền mà tôi thiết lập để lộ lỗi lần đầu tiên
  • Nhà cung cấp chuỗi công cụ có thể biết nhiều về nó hơn tôi, vì vậy họ đã làm theo cách đó vì một lý do. Tôi là ai khi quyết định các chuyên gia là sai (tôi coi họ là chuyên gia, vì tôi đã mua công cụ của họ)
  • Bạn sẽ không bao giờ phải bảo vệ sự lựa chọn của nhà cung cấp bởi Người quản lý - "Đó là những gì họ đề xuất"
  • Anh chàng mới sẽ không làm phiền bạn bằng "tại sao" và "Tốt hơn theo cách đó" - Khi mọi câu trả lời là "bởi vì họ quyết định ..."

Vì vậy, tôi sẽ là nếu bạn có thể tìm thấy một lý do hợp lệ để cấu hình lại các công cụ bạn vừa bỏ ra một số tiền, bằng mọi cách hãy làm điều đó. Nếu bạn không thể biện minh cho việc thay đổi, đừng.

Hãy nhớ rằng mỗi thay đổi đều có chi phí liên tục (thực và ẩn) để duy trì. Càng ít, chi phí càng thấp. Chẳng hạn - anh chàng mới mà tôi đã đề cập - không có thay đổi nào có nghĩa là anh ta có thể đọc hướng dẫn của họ. Cấu hình lại - bạn phải viết phần phụ lục, lưu trữ nó với các công cụ otehr, rút ​​lại và yêu cầu anh ta đọc nó sau khi đọc hướng dẫn của họ. Có thể không phải là vấn đề đối với một cửa hàng 2 người, nhưng một cửa hàng 100 người thì sao?


1

Hai quy tắc mà bạn đang hỏi về, gạch dưới ở đầu tên trường riêng và tên phương thức thường được coi là chuẩn trong các vòng tròn phát triển C #. Bằng cách thích ứng với các quy ước đó, mã của bạn sẽ ngay lập tức dễ hiểu hơn đối với các nhà phát triển khác bởi vì đó là khung tâm trí mà họ đã quen để vận hành.

Hậu tố của Nhãn, RadioButton, v.v. cho các điều khiển của bạn thường được coi là chuẩn mực. Thường xuyên có nhiều điều khiển sẽ tồn tại cho một khái niệm duy nhất (ví dụ: Nhãn và TextBox) và hậu tố này khá hữu ích. Ký hiệu Hungary thực sự đã bị bỏ rơi từ lâu bởi vì nó đã bị biến thành một thứ không thể hiện ý định ban đầu của nó, đó là bối cảnh về biến không phải loại, kích cỡ, v.v.


1

Trong trường hợp của tôi, sử dụng camelcase và dấu gạch dưới giúp với các tên biến mô tả (đọc: dài) và hoàn thành mã. Tôi không chắc chắn cách thức tự động hoàn thành của Visual Studio hoạt động nhưng trong QtCreator và ở mức độ thấp hơn, Eclipse, người ta có thể gõ, chẳng hạn

sDI

và mở rộng ra

someDescriptiveIdentifier

Lưu một chút gõ trong trường hợp bạn có tên như

someDescriptiveName, someOtherDescriptiveName, someOtherButNotTheSameDescriptiveName

mà tôi có xu hướng sản xuất khi ở "chế độ đặt tên mô tả".

Sử dụng dấu gạch dưới Tôi có thể xác định tên nào tôi muốn tự động hoàn thành

someDescriptiveIdentifier

hoặc là

_someDescriptiveClassMember

Hy vọng lời giải thích của tôi là đủ rõ rà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.