2010-09-30 27 views
5

Tôi vừa bắt đầu sử dụng Resharper. Một trong những tính năng của nó là nó cho thấy những thay đổi đối với mã dựa trên, tôi cho rằng, thực hành mã hóa tốt.Từ khóa "var" có làm giảm khả năng đọc mã không?

Một trong những thay đổi được đề xuất là thay đổi loại biến thành var trong khi gán. Tôi tiếp tục thay đổi và bây giờ mã đã biến mất ở mọi nơi. Bằng cách nào đó tôi có cảm giác rằng từ khóa "var" làm cho mã hơi khó hiểu.

Đây có phải là cách thực hành mã hóa tốt để sử dụng "var" ở bất kỳ nơi nào có thể hoặc tốt hơn là nên gắn với loại thực tế. (ngoại trừ các loại ẩn danh khi được yêu cầu sử dụng "var")

Cảm ơn.

+0

Oy, tôi dự đoán các đối số chủ quan. –

+2

Rất chủ quan - các cuộc chiến đã bắt đầu qua các câu hỏi như thế này. – Randolpho

+1

Sẽ thực hiện một cuộc thảo luận cộng đồng wiki tốt. – kbrimington

Trả lời

3

C# programming guide đề xuất sử dụng var khi tăng cường khả năng đọc, ví dụ: khi loại hiển thị, quá phức tạp hoặc không quan trọng chút nào.

Các var từ khóa cũng có thể hữu ích khi loại hình cụ thể của biến là tẻ nhạt để gõ trên bàn phím, hoặc là hiển nhiên, hoặc không thêm vào dễ đọc của mã này. Một ví dụ trong đó var hữu ích theo cách này là với các loại chung chung lồng nhau như những người được sử dụng với các hoạt động nhóm. Trong truy vấn sau, loại biến số truy vấn là IEnumerable<IGrouping<string, Student>>. Miễn là bạn và những người khác , những người phải duy trì mã của bạn hiểu được điều này, không có vấn đề gì khi sử dụng nhập ẩn để thuận tiện và ngắn gọn.

Không có quy tắc chung. Có những tình huống mà loại rõ ràng có thể tăng cường khả năng đọc.

Ví dụ:

var x = new Thingy(); //type is obvious 

var x = dict.Where(x => x.Value > 3); // type is complex and not important 

Foo(GetValue(FromOverThere())); // type is implicit anyway 

// equivalent to: 
var fromOverThere = FromOverThere(); 
var value = GetValue(fromOverThere) 
Foo(value); 

FooDocument doc = repository.Get(id); // glad to see the type here. 
3

tôi đề nghị sử dụng var khi bạn có mã như thế này:

var surelyAnXText = new XText(...); 

nơi bạn luôn có thể nói kiểu muốn chúng ta khai báo một biến. Nhưng không phải khi bạn có một cái gì đó như thế này:

var whatIsThis = foo.Some_Method_Where_You_Cant_Tell_The_Return_Type_From_The_Name(); 
Các vấn đề liên quan