2010-05-06 16 views
13

Từ khóa using có ba ý nghĩa khác nhau:Tại sao các nhà thiết kế C# lại đính kèm ba ý nghĩa khác nhau vào từ khóa 'sử dụng'?

  1. loại/namespace răng cưa
  2. namespace nhập khẩu
  3. đường cú pháp để đảm bảo Dispose được gọi

Các tài liệu gọi là hai định nghĩa đầu tiên chỉ thị (mà tôi đoán có nghĩa là chúng được tiền xử lý trong tự nhiên), trong khi cuối cùng là một tuyên bố .

Bất kể thực tế là chúng được phân biệt bằng cú pháp của chúng, tại sao các nhà phát triển ngôn ngữ lại làm phức tạp ngữ nghĩa của từ khóa bằng cách đính kèm ba ý nghĩa khác nhau vào từ khóa? Ví dụ: (tuyên bố từ chối trách nhiệm: ngoài đầu của tôi, chắc chắn có thể là ví dụ tốt hơn) tại sao không thêm từ khóa như aliasimport? Lý do kỹ thuật, lý thuyết hoặc lịch sử? Hạn ngạch từ khóa? ;-)

giả tạo mẫu:

import System.Timers; 
alias LiteTimer=System.Threading.Timer; 
alias WinForms=System.Windows.Forms; 

public class Sample { 
    public void Action() { 
    var elapsed = false; 
    using(var t = new LiteTimer.Timer(_ => elapsed = true) { 
     while (!elapsed) CallSomeFinickyApi(); 
    } 
    } 
} 

"Sử dụng" là một từ mơ hồ như vậy.

+1

tôi sẽ được hạnh phúc để có thể gõ 'chỉ using' bên trong một hàm, giống như trong C++. Tôi đoán điều này là không thể chính xác vì tính hai mặt đó. – liori

+1

FYI, hai đầu tiên là chỉ thị vì chúng không tạo ra bất kỳ mã nào; họ chỉ thay đổi bảng tên. Cái cuối cùng là một câu lệnh vì nó tạo ra mã được tạo ra. – Gabe

+0

@Gabe Cảm ơn bạn đã làm rõ điều đó. –

Trả lời

13

Đó là cuộc gọi jugdment. Cá nhân tôi đã thực hiện lựa chọn mà bạn đề xuất: sử dụng một cái gì đó như "bí danh" và "nhập". Tôi lưu ý rằng "bí danh" là từ khóa theo ngữ cảnh của C# và được sử dụng để khai báo rằng một bí danh bên ngoài đang được sử dụng trong một tệp cụ thể; có vẻ tự nhiên hơn khi sử dụng điều đó để khai báo một bí danh loại thay vì "sử dụng".

Biểu mẫu tuyên bố "sử dụng" thực sự được thêm vào khá muộn trong trò chơi; các nhà thiết kế muốn sử dụng "sử dụng" không chỉ vì nó đã là một từ khóa, mà còn bởi vì nó nhấn mạnh rằng một tài nguyên đang được sử dụng trong một vùng mã cụ thể và sau đó sẽ biến mất. Thực tế là "sử dụng" đã có ý nghĩa trong ý nghĩa chỉ thị là một tai nạn hạnh phúc.

Nếu chủ đề này quan tâm đến bạn, tôi đã viết một số bài viết về nó. Ở đây ví dụ tôi có bài viết về cách "cố định", "một phần" và "thành" cũng có nhiều ý nghĩa trong C#:

http://blogs.msdn.com/ericlippert/archive/tags/What_2700_s+The+Difference_3F00_/default.aspx

câu trả lời khác cũng liên kết đến bài viết của tôi thảo luận về cách thức chúng tôi đảm bảo rằng không phải là quá nhiều từ được dành riêng để sử dụng bởi các ngôn ngữ:

http://ericlippert.com/2009/05/11/reserved-and-contextual-keywords/

+0

Đây là câu trả lời tôi đang tìm kiếm. Cảm ơn bạn!Tôi đồng ý rằng "sử dụng" có vẻ thích hợp nhất; do đó trong ví dụ của tôi, tôi đổi tên các tập quán khác. Cảm ơn các liên kết, tôi mong được đọc chúng! –

18

Câu hỏi của bạn giả định 3 ý nghĩa theo ngữ cảnh cho 1 từ khóa phức tạp hơn 3 từ khóa khác nhau có ý nghĩa khác nhau. Một số người có thể tranh cãi điều này.

Trong những năm của tôi về mã hóa C#, tôi không thể nói rằng tôi đã từng bị nhầm lẫn về ý nghĩa của 'sử dụng'; nó luôn luôn rõ ràng từ bối cảnh.

+0

Mặc dù cá nhân tôi không có vấn đề với việc 'sử dụng' có nhiều ý nghĩa và sử dụng, tôi có thể thấy nó có thể khó khăn đối với một số người như thế nào. – JYelton

+1

Tôi chưa bao giờ bị nhầm lẫn bởi nhiều ý nghĩa, nhưng công cụ của tôi có. Sẽ rất tuyệt nếu tất cả các công cụ xử lý văn bản trên hệ thống của tôi mà tôi đã cài đặt qua nhiều thập kỷ có thể được nâng cấp để hiểu cú pháp của tất cả ngôn ngữ tôi sử dụng, nhưng điều đó dường như không xảy ra. – Ken

+2

Trong khi tôi đánh giá cao ý kiến ​​của bạn, bạn không trả lời câu hỏi. Câu hỏi của tôi không có gì liên quan đến sự phức tạp hay bối rối. (Tôi không tìm thấy ý nghĩa khó hiểu hoặc khó phân biệt.) Xem xét bạn bắt đầu một ngôn ngữ mới với một phương tiện trống (và rất nhiều lịch sử và lý thuyết), câu hỏi của tôi là tại sao họ quyết định hợp nhất ba tính năng thành một từ khóa? –

7

Tôi nghĩ rằng một nhà thiết kế ngôn ngữ buộc phải sử dụng càng ít từ khóa càng tốt, để giảm thiểu xung đột tên với số nhận dạng. Nếu bạn tưởng tượng một người nào đó đang chuyển mã từ C++ hoặc Java, ít từ khóa hơn hàm ý một khả năng nhỏ hơn của các xung đột.

Điều này không thực sự nằm trong phạm vi câu hỏi của bạn, nhưng vấn đề này đặc biệt có liên quan khi tạo phiên bản mới của một ngôn ngữ hiện có. C# 3 thêm từ khóa theo ngữ cảnh, đó là số nhận dạng trở thành từ khóa chỉ khi được sử dụng trong một tình huống cụ thể. Chỉ để ngăn chặn mã hiện tại trở thành không hợp lệ.

Và tôi đồng ý với @Judas rằng 3 cách sử dụng 'sử dụng' không gây nhầm lẫn (IMHO). C# đã được - sai lầm tôi nghĩ - bị cáo buộc là quá nhiều như Java. Hãy tưởng tượng những gì một số người sẽ nói nếu nó có một từ khóa 'nhập' ...

+1

Câu trả lời rất thú vị. Cảm ơn bạn. (Và tôi đồng ý rằng họ không bối rối; đó không phải là cơ sở cho câu hỏi của tôi.) –

7

Eric Lippert (người có và tôi tin rằng hiện đang làm việc trong nhóm C# tại Microsoft) đã đăng bình luận trả lời một câu hỏi tương tự trên blog (first comment). Trích dẫn anh ấy:

Đây là điểm khó hiểu về ngôn ngữ thiết kế; khi một từ khóa được sử dụng để đại diện cho hai khái niệm hoàn toàn khác nhau , điều này có thể gây nhầm lẫn. Nhưng giới thiệu một từ khóa mới cho mỗi khái niệm làm cho ngôn ngữ cảm thấy hơi cồng kềnh. Cá nhân tôi đã chọn "nhập" hoặc một số cú pháp như vậy cho mẫu để đảm bảo rằng nó là không bị nhầm lẫn với mẫu tuyên bố, nhưng tôi hiểu rằng đó là một phán quyết .

+0

Siêu câu trả lời xuất sắc! Cảm ơn bạn! –

+2

Vâng, tôi vẫn ở đây. –

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