Ai đó có thể giải thích cho tôi quy ước mã hóa của C # không?


14

Gần đây tôi đã bắt đầu làm việc với Unity3D và chủ yếu viết kịch bản với C #. Như tôi thường lập trình trong Java, sự khác biệt không quá lớn nhưng tôi vẫn đề cập đến một khóa học sự cố chỉ để đảm bảo rằng tôi đang đi đúng hướng.

Tuy nhiên, sự tò mò lớn nhất của tôi với C # là nó viết hoa chữ cái đầu tiên của tên phương thức của nó (ví dụ: Java: getPrime()C #: GetPrime()aka: Pascal Case?). Có một lý do tốt cho việc này? Tôi hiểu từ trang khóa học sự cố mà tôi đọc rằng dường như đó là quy ước cho .Net và tôi không có cách nào thay đổi nó, nhưng tôi tò mò muốn biết tại sao nó lại được thực hiện như thế này trái ngược với trường hợp lạc đà (tương đối?) Bình thường Điều đó nói rằng, Java sử dụng.

Lưu ý: Tôi hiểu rằng các ngôn ngữ có các quy ước mã hóa riêng (các phương thức Python đều viết thường trong câu hỏi này) nhưng tôi chưa bao giờ thực sự hiểu tại sao nó không được chính thức hóa thành một tiêu chuẩn.


18
Tôi thực sự không nghĩ rằng bạn có thể nhìn vào camelCasePascalCaseunderscore_casevà nói rằng một trong số họ là bình thường (thậm chí tương đối bình thường) và những người khác không. Như @dasblinkenlight đã nói, đó là một lựa chọn tùy ý. Điều duy nhất khiến bạn nghĩ rằng quy ước của C # khác thường là bạn "lập trình bình thường trong Java" và do đó quen với lựa chọn tùy ý được tạo cho Java.
Carson63000

Sử dụng JavaScript thay thế .. cho Unity3D :)
Lipis

@Lipis Tại sao cho - ngoài sở thích cá nhân? ;-)
ahodder

@AedonEtLIRA hoàn toàn cá nhân .. đừng bận tâm :) Thưởng thức Unity không có vấn đề gì ngôn ngữ .. bạn sẽ kết thúc sử dụng ..
Lipis

@Lipis Cho đến nay nó thật tuyệt. Hàng tấn chuông và còi và tôi chưa bỏ tiền vào nó. Nhưng tôi thích phong cách có cấu trúc của C # (c / c ++) và java.
ahodder

Câu trả lời:


27

Các quy ước đặt tên đại diện cho các lựa chọn tùy ý của nhà xuất bản của họ. Không có gì trong ngôn ngữ cấm bạn đặt tên các phương thức của bạn theo cách bạn làm trong Java: miễn là ký tự đầu tiên là một chữ cái / dấu gạch dưới và tất cả các ký tự khác là chữ cái, chữ số hoặc dấu gạch dưới, C # sẽ không than phiền. Tuy nhiên, các thư viện lớp đi kèm với .NET tuân theo quy ước mà Microsoft đã áp dụng trong nội bộ. Microsoft cũng đã xuất bản các hướng dẫn này , để những người khác cũng có thể chọn áp dụng chúng cho các thư viện lớp của riêng họ. Mặc dù bạn có thể lựa chọn làm theo hoặc bỏ qua các hướng dẫn của Microsoft, nhưng việc làm quen với mã của bạn bởi những người khác có thể diễn ra nhanh hơn nếu bạn tuân theo các nguyên tắc đặt tên tương tự.


Tuy nhiên, thường có một số lý do đằng sau một quy ước và khi tôi đọc "Có lý do chính đáng cho việc này không?" Tôi hiểu nó như một câu hỏi về TẠI SAO không phải CÁI GÌ.
greenoldman

Pascal cho các thành viên công khai / nội bộ / tĩnh và tất cả các phương thức. Lạc đà cho tư nhân. Nó giúp phân biệt phạm vi của một mã thông báo trong khi bạn quét nó. Các thistừ khóa làm như vậy. Các lựa chọn phong cách là thực tế, ngay cả khi chúng có thể xuất hiện người ngoài hành tinh
Gusdor

23

Có lẽ do ảnh hưởng của Pascal / Delphi. Rốt cuộc, người tạo ra C # và Delphi là cùng một người (Anders Hejlsberg).

Các quy ước mã hóa Delphi theo và lớn xảy ra giống như các C # trong khía cạnh này; xem http://www.econos.de/delphi/cs.html#ObjectPascal_Procedures hoặc http://wiki.delphi-jedi.org/index.php?title=Style_Guide#Method_Naming - trùng hợp?


4
+1 cho điều này bởi vì nó đưa ra những gì có thể là lý do thực tế tại sao sự lựa chọn tùy ý cụ thể này được thực hiện cho C #.
Maximus Minimus

4

Ngoài các câu trả lời khác được đưa ra, có trường hợp lạc đà cho các phương thức có nghĩa là chúng có thể xung đột với tên của các thành viên riêng, các tham số và biến phương thức sử dụng trường hợp lạc đà để đặt tên. Trong Java (và C # 1.0), điều này không phổ biến lắm vì việc sử dụng của đại biểu rất khó xử và hiếm gặp. Trong C # hiện đại, nó không thực sự phổ biến , nhưng nó cũng không phải là chưa từng nghe thấy.


1
Không nên sử dụng dấu gạch dưới trong các trường riêng tư C # (xem blog.msdn.com/b/brada/archive/2005/01/26 / 371363.aspx , vd), nhưng nó gây tranh cãi và thường được tìm thấy.
Jens

1
dựa vào vỏ bọc để phân biệt giữa các cấu trúc ngôn ngữ là một ý tưởng thực sự tồi tệ, bất kể ngôn ngữ có cho phép bạn làm điều đó hay không.
gbjbaanb

4
@Telastyn câu nói đó khá gây sốc. Hầu hết các thư viện lớp .NET sử dụng quy ước đó.
MattDavey

1
@Dunk làm thế nào là đột nhiên hội nghị của tôi ? Tôi chỉ đơn thuần là bình luận, tôi cũng không có ý kiến ​​gì về vấn đề này :)
MattDavey

2
@MarjanVenema: không chắc bạn đang nói về điều gì nhưng C # khá phân biệt chữ hoa chữ thường và bạn chắc chắn có thể có va chạm giữa các thành viên có vỏ bọc tương tự. Điều này trở nên thú vị và thú vị khi bạn có trường hợp thực tế các ngôn ngữ nhạy cảm như VB.NET mà bạn đang làm việc ở cấp độ thư viện.
Wyatt Barnett
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.