2009-11-03 34 views
7

Chúng tôi thường tuân theo chuẩn mã hóa/đặt tên cho tất cả cú pháp C#. Ví dụ, nếu chúng ta khai báo chuỗi bên trong phương thức, chúng ta sử dụng định dạng Phạm vi-datatype-FieldName. (lstrPersonName)Tiêu chuẩn đặt tên LINQ - Biểu thức Lambda

List<Person> icolPerson; 
private LoadPersonName() 
{ 
    string lstrPersonaName; 
} 

tôi là loại suy nghĩ làm cách nào để tuân thủ tiêu chuẩn đặt tên trong Biểu thức Lambda. Đặc biệt khi chúng ta định nghĩa các đối số cho func delegate, chúng ta sử dụng các tên rút ngắn như x. Ví dụ:

var lobjPerson = icolPerson.Where(x => x.person_id = 100) 

nếu bạn nhìn vào dòng trên, X không tuân theo bất kỳ tiêu chuẩn nào. tôi cũng đọc rằng một mục đích của biểu thức lambda là giảm mã lenghthy.

tôi ở đây để tìm sự trợ giúp để có được cách tiếp cận phù hợp để đặt tên tiêu chuẩn.

var lobjPerson = icolPerson.Where(x => x.person_id = 100) 

HOẶC

var lobjPerson = icolPerson.Where(lobjPerson => lobjPerson .person_id = 100) 

Trả lời

7

Tôi đã thực hiện rất nhiều lập trình trong VBScript (ASP), và việc sử dụng ký hiệu hungarian để theo dõi kiểu dữ liệu là rất quan trọng để giữ cho lành mạnh. Trong một loại ngôn ngữ an toàn như C# tôi thấy không sử dụng ở tất cả để sử dụng ký hiệu hungarian theo cách đó.

Tên biến mô tả thực hiện rất nhiều cho khả năng đọc mã, nhưng không phải lúc nào cũng phải mô tả mọi khía cạnh của một biến. Một tên như persons chỉ ra rằng đó là tập hợp các đối tượng người, cho dù đó là List<Person> hoặc IEnumerable<Person> thường không quan trọng để hiểu mã đang làm gì và trình biên dịch sẽ cho bạn biết ngay lập tức nếu bạn đang cố gắng làm điều gì đó hoàn toàn sai.

Tôi thường sử dụng tên biến chữ cái duy nhất, trong đó phạm vi của biến rất hạn chế. Ví dụ: biến số chỉ mục i trong một vòng lặp nhỏ hoặc trong biểu thức lambda.

1

Không có cách tiếp cận đúng chút nào. Tiêu chuẩn đặt tên giống như bất kỳ tiêu chuẩn mã hóa nào khác (như khoảng trống và dòng mới sau/trước biểu thức) là một quy ước trong nhóm. Vì vậy, chỉ cần viết mã của bạn như bạn muốn và khi bạn nên làm điều đó tại công ty của bạn. Nhưng hãy làm điều đó một cách nhất quán!

tôi thích sử dụng tiền tố gạch dưới trong tên của các trường riêng tư. nhưng phong cách của bạn (khả năng hiển thị + loại + tên) tìm kiếm cho tôi như một trích dẫn mã WInAPI cũ (ký hiệu Hungary) =).

3

Tôi thường chỉ cần sử dụng chữ cái đầu tiên của loại I đang truy vấn như vậy trong trường hợp của bạn vì nó là kiểu Person tôi sẽ làm:

var lobjPerson = icolPerson.Where(p => p.person_id = 100); 

Một ví dụ khác nếu nó đã được nói kiểu Car tôi sẽ làm:

var lobjCar = icolCar.Where(c => c.car_id = 100); 

tôi làm điều này cho nhanh gọn, tuy nhiên, tôi không nghĩ rằng có điều gì sai sử dụng tên đầy đủ trong truy vấn tức là car => car.car_id

0

Như lon g như biểu thức lambda của bạn chỉ là một câu lệnh duy nhất, tôi sẽ giữ tên biến càng ngắn càng tốt. Mục đích chung của việc đặt tên là làm cho mã có thể đọc được, và trong những trường hợp này, tên phương thức và ngữ cảnh chung là đủ.

Bạn không phải sử dụng x mọi lúc. Đối với một đối tượng Person, tôi có xu hướng sử dụng p để thay thế.

Nếu bạn cần viết một biểu thức phức tạp hơn liên quan đến dấu ngoặc và dấu chấm phẩy, tôi muốn nói rằng tất cả các quy tắc đặt tên thông thường đều được áp dụng.

2

Tôi nghĩ rằng tiêu chuẩn đặt tên bạn sử dụng (ký hiệu hungarian) là nhu cầu của giờ khi các công cụ cấu hình cao như Visual Studio không có mặt. Hôm nay bạn có các công nghệ như Intellisense cho bạn biết hầu hết những điều bạn đang làm sai với một biến khi bạn gõ, như gán một int vào một chuỗi. Vì vậy, tính đến hôm nay, nó không phải là một phần độc quyền của các quy ước hay tiêu chuẩn mã hóa tốt như trước đây. Hầu hết mọi người làm theo vỏ pascal hoặc lạc đà vỏ bọc những ngày này. Nếu có ai sử dụng nó, tôi nghĩ rằng đó là nhiều hơn vì sở thích cá nhân.

Có nói rằng, theo cách bạn mã và đặt tên biến của mình, bạn nên thực hiện theo phương pháp thứ hai thay thế. Một lần nữa, điều này thích hợp với sở thích cá nhân của bạn.

PS: Nhận xét này không có nghĩa là tôi đang xem xét việc bạn sử dụng ký hiệu hungarian. :)

10

lambdas tôi sử dụng một đối số lá thư, thường là chữ cái đầu tiên của những gì các tên tham số sẽ là:

  • buttons.Select(b => b.Text);

  • services.Select(s => s.Type);

Nhưng đôi khi tôi thêm thêm một vài chữ cái để làm cho mọi thứ rõ ràng hơn, hoặc để phân biệt giữa hai tham số.

Và khi không có nhiều ý nghĩa gắn liền với những điều tôi sử dụng x s và y s:

  • values.Aggregate((x, y) => x + y);

Tất cả cho biết, tiêu chuẩn tôi sử dụng cho lambdas là khó đầu tiên, biểu cảm sau này, bởi vì bối cảnh có xu hướng giúp hiểu mọi thứ (trong ví dụ đầu tiên rõ ràng là b là viết tắt của một nút).

0

Nếu bộ sưu tập của bạn được gọi là gì đó - persons, thì rõ ràng là khi bạn đang thực hiện persons.Where(p => p.Whatever) thì p là một người. Nếu lambdas của bạn quá phức tạp, nó không hiển nhiên ngay lập tức bất kể thông số bạn đang sử dụng là gì, thì bạn không nên sử dụng lambdas chút nào, hoặc làm cho chúng trở nên đơn giản hơn nhiều.

Đối với các công ước khác của bạn, điểm của việc sử dụng tiếng Hungari để gọi ra rằng personName là một chuỗi? Rõ ràng là một tên sẽ là một chuỗi. Và tại sao bạn cần một tiền tố để nhắc nhở bạn rằng một biến là một địa phương? Tuyên bố của nó là nhất thiết trong cùng một phương pháp, vì vậy mà không thể được lâu như vậy mà bạn đã quên nó. Nếu bạn có, thì phương pháp của bạn quá dài hoặc phức tạp.

Chỉ cần có số nhận dạng của bạn một cách thích hợp mô tả những gì có nghĩa là của biến này, thì phần còn lại sẽ hiển nhiên.

0

LINQ không chỉ dành cho các nhà phát triển đã từng viết các truy vấn cho cơ sở dữ liệu mà còn cho các lập trình viên chức năng.

Vì vậy, đừng lo lắng nếu bạn không phải là rất thoải mái với các loại truy vấn SQL, chúng tôi có một lựa chọn rất tốt đẹp được gọi là "Lambda Expression".

Ở đây tôi sẽ trình bày kịch bản cho cả hai tùy chọn với một ví dụ nhỏ. Ví dụ này có một mảng các số nguyên và tôi chỉ lấy các số chẵn bằng cách sử dụng sức mạnh của LINQ.

Ở đây chúng ta đi

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Query; 
using System.Xml.XLinq; 
using System.Data.DLinq; 

namespace LINQConsoleApplication1 
{ 

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] arrInt = {1,2,3,4,5,6,7,8,9,10}; 

     #region Place to change 

     //Language Integrated Query 

     var aa = from s in arrInt 

       where s % 2 == 0 
       select s; 

     #endregion 

     foreach (var item in aa) 
     { 
      Console.WriteLine("{0}", item); 
     } 

     Console.ReadKey(); 

    } 

} 

} 

Nếu bạn không muốn sử dụng phương pháp tiếp cận khác nhau của truy vấn cho ngôn ngữ sau đó bạn có thể tự do sử dụng Lambda Expression.

Vì vậy, chỉ cần thay thế vùng #region bằng các kết quả khối mã sau sẽ giống nhau.

 #region Place to change 

     //Lambda Expression 

     var aa = arrInt.Where(s => s % 2 == 0); 

     #endregion