2008-08-19 19 views

Trả lời

35

Tất nhiên là vấn đề về phong cách, nhưng tôi đồng ý với Dare: C# 3.0 Implicit Type Declarations: To var or not to var?. Tôi nghĩ rằng việc sử dụng var thay vì loại rõ ràng làm cho mã của bạn ít có thể đọc được. Trong mã sau:

var result = GetUserID(); 

Kết quả là gì? Một int, một chuỗi, một GUID? Vâng, nó quan trọng, và không, tôi không cần phải đào sâu mã để biết. Nó đặc biệt khó chịu trong các mẫu mã.

Jeff đã viết một bài đăng về điều này, nói rằng he favors var. Nhưng gã đó điên rồi!

Tôi thấy một mẫu cho sự thành công của stackoverflow: khai thác các bài viết CodingHorror cũ và (kiểu Jeopardy) cụm từ chúng theo một câu hỏi.

+8

Tại sao không sửa tên của biến thay vì than phiền về var? var userID = GetUserID(); Nó không thực sự là rất quan trọng nếu userID là chuỗi hoặc int, nó là một cái gì đó mà xác định người dùng và cần được chấp nhận bởi các chức năng có liên quan. –

+1

Vì danh tính có thể là nhiều thứ, int, string, guid, object, etc ... –

2

Tôi có cảm giác đây sẽ là một trong những câu hỏi phổ biến nhất được hỏi theo thời gian trên Stack Overflow. Nó thích hợp với sở thích. Bất cứ điều gì bạn nghĩ là dễ đọc hơn. Tôi thích var khi loại được xác định ở phía bên phải vì nó là terse hơn. Khi tôi gán một biến từ một cuộc gọi phương thức, tôi sử dụng khai báo kiểu rõ ràng.

0

"Kiểu tốt nhất" là chủ quan và thay đổi tùy theo ngữ cảnh.

Đôi khi cách sử dụng 'var' dễ dàng hơn thay vì gõ một số tên lớp cực kỳ dài, hoặc nếu bạn không chắc chắn về kiểu trả về của một hàm đã cho. Tôi tìm thấy tôi sử dụng 'var' nhiều hơn khi mucking về với LINQ, hoặc trong cho tờ khai vòng lặp.

Lần khác, sử dụng tên lớp đầy đủ sẽ hữu ích hơn vì nó viết mã tốt hơn 'var'.

Tôi cảm thấy rằng tùy thuộc vào nhà phát triển để đưa ra quyết định. Không có viên đạn bạc. Không có "một cách thực sự".

Chúc mừng!

0

Không phải luôn luôn nhưng tôi sẽ đi xa như để nói rất nhiều thời gian. Loại khai báo không hữu ích hơn nhiều so với ký pháp hungarian bao giờ hết. Bạn vẫn có cùng một vấn đề mà các loại có thể thay đổi và nhiều như công cụ tái cấu trúc hữu ích vì nó không lý tưởng so với việc không phải thay đổi nơi một loại được chỉ định ngoại trừ ở một nơi duy nhất, theo sau Không lặp lại chính mình nguyên tắc.

Bất kỳ tuyên bố dòng đơn nào có thể chỉ định tên của loại cho cả biến và giá trị của nó chắc chắn sẽ sử dụng var, đặc biệt khi nó dài một cách phổ biến. >

2

có một cuộc thảo luận tốt về vấn đề này @Coding Horror

Cá nhân tôi cố gắng giữ cho việc sử dụng nó ở mức tối thiểu, tôi đã tìm thấy một điều đau khổ dễ đọc đặc biệt là khi gán một biến từ một lời gọi phương thức.

4

@jongalloway - var không nhất thiết làm cho mã của bạn dễ đọc hơn.

var myvariable = DateTime.Now 
DateTime myvariable = DateTime.Now; 

Đầu tiên là giống như có thể đọc được là thứ hai, và đòi hỏi ít công việc

var myvariable = ResultFromMethod(); 

đây, bạn có một điểm, var có thể làm cho mã dễ đọc hơn. Tôi thích var bởi vì nếu tôi thay đổi một số thập phân thành một đôi, tôi không phải thay đổi nó trong một loạt các địa điểm (và không nói refactor, đôi khi tôi quên, chỉ cần cho tôi var!)

EDIT: chỉ cần đọc bài viết, tôi đồng ý. lol.

1

Một trong những lợi thế của một công cụ như ReSharper là bạn có thể viết mã theo bất kỳ cách nào bạn muốn và định dạng lại thành thứ gì đó dễ bảo trì hơn sau đó. Tôi có R # thiết lập để luôn luôn định dạng lại như vậy mà các loại thực tế trong sử dụng có thể nhìn thấy, tuy nhiên, khi viết mã tôi gần như luôn luôn gõ 'var'.

Công cụ tốt cho phép bạn tận dụng tối đa cả hai thế giới.

John.

0

Có một really good MSDN article về chủ đề này một nó vạch ra một số trường hợp bạn không thể sử dụng var:

Các hạn chế sau đây áp dụng đối với khai báo biến ngầm-gõ:

  • var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.
  • var cannot be used on fields at class scope.
  • Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);
  • Multiple implicitly-typed variables cannot be initialized in the same statement.
  • If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.

Tôi muốn giới thiệu kiểm tra nó hiểu được ý nghĩa đầy đủ của việc sử dụng var trong mã của bạn.

10

Tôi chỉ sử dụng nó khi rõ ràng là var là gì.

rõ ràng với tôi:

XmlNodeList itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 

không rõ ràng với tôi:

var itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 
0

I'm seeing a pattern for stackoverflow success: dig up old CodingHorror posts and (Jeopardy style) phrase them in terms of a question.

tôi bào chữa vô tội! Nhưng bạn nói đúng, đây dường như là một câu hỏi rất ít phổ biến.

9

Tóm tắt tốt nhất về câu trả lời tôi đã thấy là Eric Lippert's comment, về cơ bản bạn nên sử dụng loại bê tông nếu điều quan trọng là loại nào, nhưng không phải là khác. Về cơ bản loại thông tin nên được dành riêng cho những nơi mà loại là quan trọng.

Tiêu chuẩn tại công ty của tôi là sử dụng var ở mọi nơi, chúng tôi đến sau reading various recommendation and then spending some time trying it out to see whether the lack of annotated type information was a help or a hindrance. Chúng tôi cảm thấy đó là một sự giúp đỡ.

Hầu hết các đề xuất mọi người đã liên kết với (ví dụ: Dare's) là các đề xuất của những người chưa bao giờ thử viết mã bằng var thay vì loại bê tông. Điều này làm cho các khuyến nghị tất cả nhưng vô giá trị, bởi vì họ không nói từ kinh nghiệm, họ chỉ đơn thuần là ngoại suy.

Lời khuyên tốt nhất mà tôi có thể cung cấp cho bạn là tự mình thử và xem những gì phù hợp với bạn và nhóm của bạn.

1

Nó chỉ có ý nghĩa, khi bạn không biết loại trước.

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