2012-01-12 82 views
24

Gần đây, sử dụng C#, tôi đã khai báo một tham số phương thức sử dụng ký tự Latin ñ và tôi đã cố gắng xây dựng (biên dịch) toàn bộ giải pháp của mình và nó hoạt động, do đó tôi có thể thực thi chương trình của mình. Nhưng tôi tò mò muốn biết liệu có sai khi sử dụng các ký tự đặc biệt như ký tự Latinh trong một mã nguồn được viết bằng C# không? Nếu sai, tại sao?Có sai khi sử dụng các ký tự đặc biệt trong mã nguồn C#, chẳng hạn như "ñ"?

Bên cạnh nó là nhiều dễ đọcphổ để viết mã bằng tiếng Anh, đang có lý do nào khác để không sử dụng ký tự đặc biệt trong một mã nguồn C#?

+2

Tôi đặt cược mã nguồn trên toàn thế giới đầy với các chú thích được viết bằng ngôn ngữ mẹ đẻ của người lập trình. Vì vậy, không, không thể thấy điều này có thể sai. –

+0

liên quan: http://programmers.stackexchange.com/questions/1483/do-people-in-non-english-speaking-countries-code-in-english – naveen

+2

Nhưng, * bên cạnh nhận xét *, ** tên thành viên thì sao ** chẳng hạn như phương pháp, đối số, v.v ...? –

Trả lời

22

Hãy để tôi chia nhỏ câu hỏi này thành một số câu hỏi.

Có phải là pháp lý theo đặc điểm kỹ thuật để sử dụng chữ cái không phải La Mã trong mã định danh C#, chuỗi v.v ... không?

Có, tuyệt đối. Bất kỳ ký tự nào mà đặc tả Unicode phân loại là một chữ cái là hợp pháp. Xem thông số kỹ thuật để biết chi tiết chính xác.

Có bất kỳ vấn đề kỹ thuật nào liên quan đến các chữ cái không phải La Mã trong các chương trình C# không?

Có, có một số ít. Như bạn có thể biết, bạn có thể cả hai mã liên kết "tĩnh" và "động" vào một ứng dụng, và trình biên dịch là một ứng dụng. Trước đây, chúng tôi đã gặp vấn đề trong quá trình trình biên dịch có một phiên bản cũ của thuật toán phân loại Unicode và trình chỉnh sửa có phiên bản hiện tại được liên kết với dyamically, và bây giờ trình soạn thảo và trình biên dịch có thể không đồng ý là một lá thư hợp pháp, có thể gây nhầm lẫn cho người dùng. Tuy nhiên, các ký tự La tinh có dấu mà bạn đề cập đã ở trong tiêu chuẩn Unicode quá lâu đến nỗi chúng không có khả năng gây ra bất kỳ sự cố nào.

Hơn nữa, nhiều người vẫn sử dụng trình chỉnh sửa kiểu cũ; Tôi đã học được cách lập trình tại WATCOM vào cuối những năm 1980 và tôi vẫn thường xuyên sử dụng WATCOM VI làm biên tập viên của mình. Đôi khi tôi có thể viết mã nhanh hơn trong Visual Studio bởi vì các ngón tay của tôi chỉ thực sự tốt sau 23 năm luyện tập. (Mặc dù những ngày này tôi sử dụng Visual Studio cho hầu như tất cả mọi thứ.) Rõ ràng là một biên tập viên viết vào những năm 1980 là sẽ có một vấn đề với Unicode.

Có bất kỳ vấn đề phi kỹ thuật nào liên quan đến các chữ cái không phải La Mã trong các chương trình C# không?

Rõ ràng là có. Cá nhân tôi thà sử dụng chữ Hy Lạp cho các tham số kiểu chung chung, ví dụ:

class List<τ> : IEnumerable<τ> 

hoặc khi thực hiện đang toán học:

degrees = 180.0 * radians/π; 

Nhưng tôi cưỡng lại sự thôi thúc trong sự tôn kính cho đồng nghiệp của tôi đã không đặc biệt muốn để cắt và dán hoặc học các tổ hợp phím phức tạp, chỉ để chỉnh sửa mã của tôi.

+3

Tôi thực sự thích ý tưởng của bạn về việc sử dụng các chữ cái Hy Lạp cho các thông số kiểu chung và các biểu thức liên quan đến toán học. –

+0

Tôi cho rằng bạn có nghĩa là tổ hợp phím "phức tạp"? – phoog

+1

Vì tò mò, tại sao bạn không sử dụng phiên bản vi hiện đại, như gvim? – svick

0

Miễn là nó biên dịch, tôi nghĩ rằng nó là OK để sử dụng, những gì mọi người nói tiếng Anh, gọi các ký tự đặc biệt. Tôi sống ở Thụy Điển và ở đây chúng tôi có các ký tự ÅÄÖ không tồn tại trong tiếng Anh. Nhiều người sử dụng ÅÄÖ trong các chương trình của họ để có thể viết chương trình để một nhà phát triển Thụy Điển có thể hiểu được. Đôi khi có những từ không có bản dịch tốt bằng tiếng Anh và sau đó từ Thụy Điển là giải thích nhiều hơn.

6

Added bit đầu tiên này dựa trên nhận xét:

này không trả lời câu hỏi ... Các OP không hỏi cho dù đó là phép (rõ ràng nó là), nhưng cho dù đó là sai - Thomas Levesque

Ok, hãy để tôi giải quyết nó trực tiếp hơn:

nó là sai lầm khi sử dụng ký tự đặc biệt như các ký tự Latinh trong một mã nguồn được viết bằng C#? Nếu nó sai, tại sao?

Theo định nghĩa của đặc điểm kỹ thuật, nó không phải là "sai" (xem bên dưới).

Bên cạnh đó là dễ đọc hơn và phổ quát để viết mã bằng tiếng Anh, là có bất kỳ lý do nào khác không sử dụng ký tự đặc biệt trong một nguồn C# mã?

Vì bạn đã nói "Bên cạnh", tôi sẽ không giải quyết các chủ đề về tính dễ đọc cũng như "phổ quát" (thích hợp cho câu hỏi StackOverflow). Về phần khác của bạn: "có lý do nào khác để không sử dụng các ký tự đặc biệt" ... Vì tôi bỏ qua những điều đầu tiên bạn đã đề cập, tôi phải nói rằng tôi không thể nghĩ nhiều. Điều duy nhất tôi có thể nghĩ đến là; Chúng tôi vẫn gặp vấn đề với một số công cụ hỗ trợ Unicode ngày nay (các công cụ của bên thứ ba thương hiệu, chủ yếu) có thể là bạn sử dụng một số công cụ lập dị không xử lý chính xác unicode, hoặc không phù hợp với thông số C# - nhưng tôi đã không gặp bất kỳ điều gì. Vì vậy, tôi muốn nói không. (Hãy nhớ rằng bạn đặc biệt nói rằng tôi không phải giải quyết các chủ đề về tính dễ đọc hoặc phổ quát).


Từ C# ECMA Specification Trang 70:

Các quy tắc để định danh cho trong mục này tương ứng chính xác với những khuyến cáo của Unicode chuẩn Phụ lục 15 trừ đó gạch được phép như một nhân vật ban đầu (như là truyền thống trong ngôn ngữ lập trình C), các chuỗi thoát Unicode được phép trong số nhận dạng và ký tự “@” được phép làm tiền tố để bật các từ khóa .

identifier:: 
    available-identifier 
    @ identifier-or-keyword 

available-identifier:: 
    An identifier-or-keyword that is not a keyword 

identifier-or-keyword:: 
    identifier-start-character 
    identifier-part-charactersopt 

identifier-start-character:: 
    letter-character 
    _ (the underscore character U+005F) 

identifier-part-characters:: 
    identifier-part-character 
    identifier-part-characters 
    identifier-part-character 

identifier-part-character:: 
    letter-character 
    decimal-digit-character 
    connecting-character 
    combining-character 
    formatting-character 

letter-character:: 
    A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl 
    A unicode-escape-sequence representing a character of classes Lu, Ll, Lt, Lm, Lo, or Nl 

Các bit quan trọng có gì spec định nghĩa một letter-character như.

Nó đặc biệt bao gồm: A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nl

Nhân vật bạn đề cập (ñ unicode reference) thuộc thể loại "Lu" (Letter, Uppercase) được đặc biệt cho phép bởi các đặc điểm kỹ thuật trong một định danh.

+3

Điều này không trả lời được câu hỏi ...OP không hỏi liệu nó có được phép hay không (rõ ràng là nó), nhưng cho dù đó là sai –

+0

Nếu nó được cho phép bởi đặc tả thì nó theo định nghĩa không phải là "sai". Có hay không nó cau mày khi là một vấn đề ** OPINION ** và điều đó không thực sự thích hợp cho một câu hỏi StackExchange. Ngoài ra, ý kiến ​​đó sẽ thay đổi đáng kể theo ngôn ngữ và tình hình. – Steve

+0

* Nếu nó được cho phép bởi đặc điểm kỹ thuật thì nó theo định nghĩa không "sai" *: Tôi không đồng ý ... điều gì đó có thể là một hành động xấu ngay cả khi nó hợp pháp –

3

Cá nhân tôi thích khi mọi đoạn mã/nhận xét chỉ được viết bằng tiếng Anh. Và tiếng Anh không phải là ngôn ngữ mẹ đẻ của tôi. Tôi chỉ nghĩ rằng nó tốt hơn cho giao tiếp nếu mọi người viết mã bằng cùng một ngôn ngữ.

Thật là đau đớn khi bạn phải dịch - từ một ngôn ngữ bạn không biết một từ - tên biến hoặc nhận xét xung quanh một đoạn mã bạn đang gỡ lỗi.

Một điểm khác là bản thân ngôn ngữ được viết bằng tiếng Anh.

Tất nhiên đó là sở thích cá nhân.

+1

Điều này đặc biệt khó chịu khi bạn nhận dạng bằng tiếng nước ngoài mà bạn thậm chí không biết cách phát âm ... –

+2

@ThomasLevesque Nó cũng gây phiền nhiễu khi bạn có một định danh bằng tiếng Anh mà bạn thậm chí không biết cách phát âm :-) – phoog

5

Chơi xung quanh ở nhà, tôi thường đặt tên là Func thông số λ vì điều đó làm tôi thích thú.

Đối với mã bất kỳ ai sẽ thấy, tôi sẽ không làm cho ai đó gặp khó khăn trong việc nhập chỉ vì nó làm tôi sử dụng chữ cái không phải Latinh trong một trường hợp cụ thể. Đó không phải là nơi thích thú.

Với một chữ cái Latinh hoàn toàn bình thường như ñ Tôi không có chút gì khi sử dụng nó nếu tôi có lý do chính đáng để sử dụng từ vay mà nó được sử dụng. Điều đó nói rằng, nó không bao giờ xuất hiện. Về khoản vay chỉ có dấu phụ tôi đã từng sử dụng trong mã hóa là façade, nhưng nó được sử dụng rất lâu trong ngữ cảnh máy tính và do đó thường thấy ở dạng mặt tiền mà tôi nghĩ về mặt tiền như một từ máy tính có nguồn gốc từ mặt tiền trong giống như cách tôi nghĩ về màu như một từ máy tính cho màu mặc dù sau này là cách đánh vần được sử dụng trong các hình thức tiếng Anh tôi sử dụng, và do đó chỉ có bao giờ sử dụng façademàu bằng tiếng Anh.

+1

+1 vì lịch sử khoa học * mặt tiền *! :) –

+0

@RubensMariuzzo Tôi nghĩ rằng bình luận nói nhiều hơn về ý tưởng rằng ai đó có lịch sử cá nhân liên quan đến sự phân chia thời thơ ấu giữa văn học và lập trình máy tính, so với lịch sử CS :) –

+0

Lý do tôi ghét khi tôi được yêu cầu viết mã lần đầu tiên ngôn ngữ là từ kết thúc bằng tiếng Anh kết thúc bằng tiếng Pháp. Tôi không biết làm thế nào để đặt tên cho bools của tôi bằng tiếng Pháp. Vì vậy, tôi hạnh phúc này sẽ không phải là một vấn đề cho thế hệ C#. –

Các vấn đề liên quan