Công ước đặt tên nào sẽ được sử dụng cho các tham số chức năng C #


14

Có những tình huống khi một tên được truyền trong Parameter sẽ được chuyển thành một loại mới, nhưng tên của đối tượng Passed vẫn giữ nguyên. Đối với trường hợp Thuộc tính lớp, chúng ta có thể sử dụng toán tử này, nhưng đối với biến cục bộ trong các hàm. Quy ước mã hóa nào được sử dụng rộng rãi.

thí dụ,

void MyFunc(BaseClass myPara)
{
  DerivedClass _mypara = (BaseClass)myPara;
}

hoặc ngược lại

void MyFunc(BaseClass _myPara)
{
  DerivedClass mypara = (BaseClass)_myPara;
}

hoặc bất kỳ quy ước nào khác


1
Bất kể câu trả lời nào khác bạn nhận được dưới đây, có một công cụ nhỏ để phân tích và thực thi các quy tắc phong cách: archive.msdn.microsoft.com/sourceanalysis
Patrick Hughes

Câu trả lời:


11

Tiền tố hoặc tham số hoặc biến cục bộ có dấu gạch dưới không phải là thành ngữ trong C #, nó không dễ đọc và không thường được sử dụng (mặc dù nó là hợp pháp, vì vậy bạn có thể tự do như vậy nếu bạn muốn).

Tên tốt nhất cho tham số và biến là tên mô tả. Bạn cần suy nghĩ tại sao bạn thay đổi loại hình, lý do cho các diễn viên là gì. Sau đó, bạn sẽ có thể đến với 2 tên khác nhau. Ví dụ: bạn đã thông qua một "người" và chuyển đổi nó thành "khách hàng" thì bạn có thể sử dụng người và / hoặc khách hàng trong các tên biến.

Nếu bạn thực sự không thể nghĩ ra 2 cái tên khác nhau thì tôi sẽ sử dụng "as" trong tên đó ( có một câu hỏi trên trang web này vài ngày trước về điều này ). Ví dụ: bạn sẽ sử dụng "myParaAsDeriving" cho biến cục bộ.

Nếu có thể tôi sẽ không sử dụng điều này, tôi sẽ suy nghĩ kỹ về vấn đề bạn đang giải quyết và những cái tên có ý nghĩa nào có thể được sử dụng, nhưng nếu thất bại thì điều này khá dễ đọc.


Chỉ cần kiểm tra lại (Tôi không quen thuộc với C #). Gạch dưới hàng đầu thực sự là "hợp pháp" hợp pháp trong C #? Trong C và C ++, các số nhận dạng có dấu gạch dưới hàng đầu (hoặc nhân đôi) được bảo lưu, do đó, mặc dù chúng hợp pháp theo nghĩa, bạn không nên xác định số nhận dạng của riêng mình như thế. csharp.comsci.us/etymology/identifier.html cho thấy C # có thể giống nhau (xem dưới cùng, cuối cùng của "giới hạn") nhưng thực tế không nói "dành riêng".
Steve314

gạch dưới hàng đầu là hoàn toàn hợp pháp trong C # và không được bảo lưu theo bất kỳ công ước nào tôi biết.
Steve

9

Đầu tiên sử dụng

void MyFunc(BaseClass _myPara)
{
} 

Rõ ràng là sai! Vì rất nhiều tiêu chuẩn mã hóa c # sử dụng tiền tố của _ _ trên tất cả các tên trường ! Mã của bạn cần phải dễ hiểu bởi các lập trình viên khác vì vậy mã không nên được viết theo cách sẽ đánh lừa rất nhiều lập trình viên C #.

Với tất cả các lợi ích của các phương thức nhỏ, cá nhân tôi không thấy bất kỳ nhu cầu nào về quy ước đặt tên để tách các biến cục bộ khỏi các tham số. Nếu phương thức của bạn có quá nhiều tham số và biến cục bộ mà bạn không thể biết chuyện gì đang xảy ra mà không có quy ước đặt tên thì bạn có vấn đề lớn hơn. (Điều này được trình bày rõ trong Sách mã sạch , một cuốn sách Java nhưng tôi vẫn thấy nó có ích lớn khi là lập trình viên C #)


4

Nếu bạn muốn tiền tố chúng với một cái gì đó thì bạn nên sử dụng p_cho tham số: nói chung tôi đoán bạn có thể sẽ làm phiền nhiều người nếu bạn làm điều này. NHƯNG phải nhất quán, đừng chỉ làm điều đó ở một nơi chỉ vì bạn cần hai tên khác nhau cho các biến mà bạn muốn đặt cùng một tên.

Một quy tắc chung tốt với đặt tên biến đi như thế nào;

  • Nếu bạn chỉ có một loại tên đối tượng thì theo chức năng của nó:

    var builder = new PizzaBuilder();
  • Nếu bạn có nhiều hơn một tên họ theo chức năng và chuyên môn của họ:

    var pizzaBuilder = new PizzaBuilder();
    var milkShakeBuilder = new MilkShakeBuilder();

P_ (hoặc chỉ p) cho tham số là một quy ước cũ đã được sử dụng rất nhiều trong C ++ và C. Nó có xu hướng đi với l_ cho local và (trong C ++) m_ cho biến thành viên. Tôi cũng đã thấy nó trong Pascal, Modula 2 và Ada, vì vậy nó không chỉ là một thứ thuộc họ C. Nó kinda tình yêu-it-hoặc-ghét-nó, mặc dù. Tôi đã sử dụng nó gần như một cách ám ảnh, lý do của tôi là Steve Haighs lý do cho "Như". Ví dụ, các phương thức setter thường làm m_Whatever = p_Whatever;- việc đặt hai tên định danh có ý nghĩa khác nhau sẽ gây khó xử. Nhưng tôi đã bắt đầu đặt câu hỏi liệu những trường hợp đó có đủ phổ biến để biện minh cho quy ước nhất quán hay không.
Steve314

4

Các quy ước đặt tên C # sẽ có bạn:

  • Sử dụng PascalCasing cho các phương thức, thuộc tính công cộng và tên lớp
  • Sử dụng IPascalCasing (chú ý chữ I khi bắt đầu) cho tên giao diện
  • Sử dụng camelCasing cho các tham số phương thức và các biến cục bộ
  • Sử dụng _underscoredCamelCasing cho các trường riêng trên toàn lớp

Và xin vui lòng tránh xa ký hiệu của Lynn. Điều đó là vô nghĩa và không tuân thủ các quy ước C #.


các trường riêng được pascal-cased nếu chúng là tĩnh.
sara

2

Việc nhấn mạnh trong cách đặt tên biến có thể không cần thiết vì chúng ta có từ khóa "này" để tham chiếu đến các biến cấp độ lớp một cách cụ thể. Nếu bạn muốn tìm hiểu thêm về các quy ước đặt tên biến từ các chuyên gia, tôi khuyên bạn nên xem bài báo khét tiếng có tên "Quy tắc đặt tên biến đổi và phân loại của Ottinger" của Tim Ottinger, một bài viết được hỗ trợ bởi cố vấn mã hóa sạch Robert C. Martin .

Ottinger tuyên bố rằng mã của bạn phải ở mức dễ đọc nhất có thể, giống như văn xuôi được viết tốt, vì vậy ...

public void Function(string p_Parameter1, string p_Parameter2)

... sẽ dễ đọc hơn như ...

public void Function(string parameter1, string parameter2)

... Trong đó tham số1 và 2 là tên mô tả cho các biến tương ứng.

Đây là liên kết, chắc chắn đáng xem: Liên kết


-3

Tôi tin vào tham số hậu tố: chuỗi s_, int i_, v.v.

Tôi cũng tin rằng tên parm nên ngắn gọn và chung chung nhất có thể.

Bây giờ vì lý do:

  • Trong hàm, bạn không muốn sửa đổi tham số theo bất kỳ cách nào, nếu bạn cần một phiên bản sửa đổi, hãy tạo một biến mới để gắn nó vào. Việc đặt tên của parms với hậu tố sẽ đảm bảo bạn không gán cho chúng nếu bạn trả tiền chú ý.
  • Các ngoại lệ cho quy tắc này xuất hiện khi parm là ref hoặc out. Mặc dù tôi vẫn sử dụng hậu tố trên những cái đó.
  • Tại sao tên chung ngắn? Bạn nên ghi lại chức năng của mình để bạn biết s_ thực sự là gì theo nghĩa mô tả. Vì vậy, ngoài ra, sử dụng các tổng quát ngắn sẽ rất hữu ích khi bạn tạo các nhóm chức năng tương tự hoặc cắt một thân hàm để chuyển sang chức năng khác làm điểm bắt đầu để sửa đổi.
  • Lợi ích thực sự của tên chung là bạn không phải nhớ lại những gì bạn đã gọi tham số đó trong hầu hết các trường hợp. Bạn biết rằng bạn nhận được một chuỗi, vì vậy s_, v.v. và không phải tự hỏi liệu đó là 'tên tệp' hay là 'filepath' hay là 'fullpath', đó là chuỗi duy nhất nên 's_'.

Mọi thứ đều có sự đánh đổi, và việc bạn có sử dụng thứ gì đó hay không sẽ phụ thuộc rất nhiều vào cách nó phù hợp với phong cách hiện tại của bạn.


6
-1: a) Bạn đang thêm tiền tố, không phải là hậu tố; b) đó là ký hiệu Hungary và nên đi theo cách làm .
Peter K.

1
Loại C # có an toàn không?
pyvi

1
@Peter K. - Có vẻ như tôi thích silà những cái tên ngắn vì đây chỉ là một ví dụ. IOW Tôi không nghĩ đây là tiếng Hungary - Tôi nghĩ rằng bạn đang hiểu sai một tên ngắn chỉ là thứ cổ điển string shoặc int itôi không thể nghĩ ra cái tên hay hơn, nhưng với các hậu tố gạch dưới được dán vào .
Steve314

@ Steve314: Ah, bạn có thể đúng! Hãy xem Mark trả lời.
Peter K.

S_ là tôi đoán một HG ẩn danh, và nó không phải là do ví dụ.
Đánh dấu
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.