Microsoft có khuyến khích việc sử dụng 'var' trong C # không? (VS2017)


15

Tôi đang nhìn vào sắp tới Visual Studio 2017 .

Trong phần có tiêu đề Boosted Productivity, có một hình ảnh của Visual Studio đang được sử dụng để thay thế tất cả các lần xuất hiện của var bằng loại rõ ràng.

tăng năng suất VS2017

Mã rõ ràng có một số vấn đề mà Visual Studio đã xác định là 'cần sửa chữa'.

Tôi muốn kiểm tra lại sự hiểu biết của tôi về việc sử dụng var trong C # vì vậy tôi đã đọc một bài viết từ năm 2011 của Eric Lippert có tên là Sử dụng và lạm dụng cách gõ ngầm .

Eric nói:

  • Sử dụng var khi bạn phải; khi bạn đang sử dụng các loại ẩn danh.
  • Sử dụng var khi loại khai báo là rõ ràng từ trình khởi tạo, đặc biệt nếu đó là một tạo đối tượng. Điều này giúp loại bỏ sự dư thừa.
  • Cân nhắc sử dụng var nếu mã nhấn mạnh vào mục đích kinh doanh của semantic có nghĩa là một biến số và hạ thấp các chi tiết cơ khí của bộ lưu trữ.
  • Sử dụng các loại rõ ràng nếu làm như vậy là cần thiết để mã được hiểu và duy trì chính xác.
  • Sử dụng tên biến mô tả bất kể bạn có sử dụng hay không. Tên biến phải đại diện cho ngữ nghĩa của biến, không phải là chi tiết lưu trữ của nó; Số thập phân của Nhật Bản là xấu; Quan tâm của người Nhật Bản là tốt.

Tôi nghĩ rằng hầu hết việc sử dụng var trong mã có lẽ là ok. Tôi nghĩ sẽ không sao nếu không sử dụng var cho bit đọc ...

var tweetReady = workouts [ ... ]

... bởi vì có thể nó không phải là 100% ngay lập tức là loại gì nhưng ngay cả sau đó tôi biết khá nhanh rằng đó là boolean .

Việc sử dụng var cho phần này ...

var listOfTweets = new List<string>();

... có vẻ như tôi sử dụng var rất tốt vì tôi nghĩ rằng nó không cần thiết để làm như sau:

List<string> listOfTweets = new List<string>();

Mặc dù dựa trên những gì Eric nói, biến có lẽ nên là tweet chứ không phải là listOfTweets .

Điều gì sẽ là lý do để thay đổi tất cả các varsử dụng ở đây? Có điều gì sai với mã này mà tôi đang thiếu?


Mã trong ảnh chụp màn hình chính xác là loại mà bạn đồng ý không nên sử dụng var ... Làm rõ?
Telastyn

1
Tôi nghĩ rằng tất cả các sử dụng varở đây là tốt. Bạn có thể có thể thay đổi một - nhưng ngay cả sau đó tôi nghĩ rằng nó không thực sự cần thiết. Tại sao thay đổi tất cả thành loại rõ ràng?
Rowan Freeman

2
Hãy nhớ rằng những gì rõ ràng đối với con người không phải lúc nào cũng rõ ràng đối với studio hình ảnh.
candied_orange

Tất cả? Bạn có một lỗi trong ảnh chụp màn hình có liên quan rõ ràng var.
Telastyn

Chà, đó không phải là một lỗi như vậy mà là một cảnh báo về loại bạn muốn một kẻ nói dối chỉ ra. Theo hình ảnh, tất cả varsđã được đánh dấu theo cùng một cách; với cùng dấu chéo cảnh báo bên cạnh chúng và gạch chân màu đỏ. Có lẽ Visual Studio muốn sửa tất cả chúng theo cùng một cách. Trừ khi tôi nhầm.
Rowan Freeman

Câu trả lời:


26

TL; DR: không, Microsoft không khuyến khích việc sử dụng 'var' trong C #. Hình ảnh chỉ đơn giản là thiếu bối cảnh để giải thích lý do tại sao nó phàn nàn.

Nếu bạn cài đặt VS2017 RC và mở bảng Tùy chọn và đi đến Text Editor -> C#, bạn sẽ thấy một phần mới : Code Style. Điều này tương tự với những gì ReSharper đã cung cấp trong một thời gian: một bộ quy tắc có thể định cấu hình cho các kiểu mã hóa.

Nó bao gồm ba tùy chọn xung quanh việc sử dụng var: cho các loại tích hợp, khi loại biến rõ ràng và "Ở nơi khác". Trong mỗi trường hợp, bạn có thể chỉ định "loại thích rõ ràng" hoặc "thích var" và đặt mức thông báo thành "không", "đề xuất", "cảnh báo" hoặc "lỗi":

nhập mô tả hình ảnh ở đây


3
Mặc định là gì? Nếu "cài đặt gốc" là "Thích loại rõ ràng" thì có thể tranh cãi rằng MS không khuyến khích việc sử dụng var.
JacquesB

@JacquesB, mặc định như trong ảnh chụp màn hình. Vì tất cả được đặt thành "Không", thật khó để biết liệu "Loại thích rõ ràng" có được đặt chủ động theo cách ưa thích của MS hay không, hay đó chỉ là "giá trị 0". Theo như tôi quan tâm, các nhà phát triển tốt nhất đều ủng hộ var, vì vậy tôi không quan tâm nhiều đến quan điểm của MS về vấn đề này.
David Arno

6

Tôi nghĩ rằng bạn đang đọc quá nhiều vào nó. Vì vậy, có một tính năng cho phép bạn thay thế các cách sử dụng gõ ngầm bằng các chú thích loại rõ ràng và bạn kết luận từ đó, việc gõ ngầm đó không được khuyến khích. Ngoài ra còn có một tính năng để biên dịch mã byte C♯ sang CIL, bạn có kết luận rằng C♯ không được khuyến khích và thay vào đó tất cả chúng ta nên viết mã byte CIL? Chắc là không.

Microsoft chỉ đơn giản là thể hiện sự hiểu biết sâu sắc về IDE có mã của bạn. Nó thậm chí có thể viết các loại cho bạn mà không cần bạn phải đánh vần chúng. Đó là nó.

Đây đơn giản là một ví dụ điển hình về việc thể hiện khả năng hiểu mã của IDE. Nó nhỏ và khép kín (không giống như hiển thị tái cấu trúc lớn hơn), nó có sẵn trong tất cả các phiên bản và áp dụng cho tất cả các nhà phát triển (không giống như một số tính năng trực quan kiến ​​trúc rất ấn tượng chỉ có trong Ultimate và không áp dụng cho một phần đáng kể trong số những người dùng tiềm năng của VS, những người sẽ không bao giờ có dự án lớn như vậy) và mặc dù nó rất đơn giản (nó thực sự giống hệt nhưcsc.exe đã được thực hiện kể từ đóvarđã được giới thiệu), nó chắc chắn trông rất ấn tượng, đặc biệt đối với một người không thực sự hiểu kiểu gõ ngầm và kiểu suy luận (hoặc những người cố gắng google "gõ suy luận" và bị choáng ngợp với các thuật ngữ như Hindley-Milner, thống nhất, quay lui, trong thực tế Suy luận chỉ cục bộ của C♯ là cực kỳ đơn giản và dễ hiểu).

Vì vậy, trong ngắn hạn: đó là một cách hào nhoáng để thể hiện một tính năng IDE.

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.