Trên một số Dot Net Rocks podcast gần đây, Jon Skeet đề cập đến những lạm dụng có thể có của cú pháp LINQ. Những ví dụ nào khiến mọi người nhìn thấy những điều điên rồ đang được thực hiện với LINQ?Lạm dụng tồi tệ nhất mà bạn đã thấy về cú pháp LINQ là gì?
Trả lời
Dưới đây là my own abuses - hoàn toàn là để có tiếng cười vào một đêm geek, và chứng minh những gì trình biên dịch thực sự làm với biểu thức truy vấn.
Có thể cho rằng tôi "LINQ to Mandelbrot" là một chút lạm dụng quá :)
Tôi đặc biệt nghĩ đến việc lạm dụng cú pháp bằng cách này, nhưng luôn luôn có rất nhiều cách để lợi dụng sự hiện diện của LINQ - làm việc "cách LINQ" khi có các phương pháp đơn giản hơn mà không cần sử dụng LINQ. Ví dụ, nhận được tới phần tử thứ n
của một mảng:
// Sensible (we know that people implements IList<Person>)
Person x = people[10];
// Insane
Person y = people.Skip(9).First();
tôi nghi ngờ sẽ có nhiều trường hợp lạm dụng như thế này hơn lạm dụng sức mạnh của biểu thức truy vấn, một phần là do nhiều nhà phát triển sẽ không nhận ra rằng lạm dụng truy vấn biểu thức thậm chí sẽ hoạt động :)
Nó phải là ray-tracer implemented in a single LINQ expression. Thông minh, đẹp và đáng sợ cùng một lúc!
Thực tế là tất cả trong một biểu hiện là đáng sợ - nhưng rất có thể nếu nó được chia thành các biểu thức riêng biệt (có thể dễ dàng thực hiện do tính tương thích), nó có thể thông minh, cách đẹp nhất và dễ đọc nhất để thực hiện bộ dò tia. Có lẽ. Các loại vô danh có thể làm tổn thương nó, phải thừa nhận. –
Tôi không biết phải nói gì. Một mặt, đó là một sự lạm dụng cú pháp ngôn ngữ điên rồ. Mặt khác, ai đó rõ ràng biết họ đang làm gì và phô trương một số tài năng mà mọi người có. –
Thành thật mà nói, nó đã nhận được trường hợp người chọn cú pháp LINQ nơi mã để làm như vậy:
- là như nhau hoặc dài hơn một vòng lặp đơn giản
- Cung cấp không có hiệu suất hoặc lợi thế đúng đắn (khả năng đọc/bảo trì) trong một vòng lặp đơn giản
một trong những "tốt nhất" người mà tôi từng thấy là từ thedailywtf.com
public string LastSixDigits
{
get
{
if (string.IsNullOrWhiteSpace(this.Number) || this.Number.Length < 6)
return string.Empty;
return this.Number.Reverse().Take(6).Reverse().Aggregate(string.Empty, (s, c) => s += c);
}
}
- 1. Khoảng cách kiến thức kỹ thuật tồi tệ nhất mà bạn đã thấy?
- 2. Gotcha tồi tệ nhất trong WPF là gì?
- 3. Nghịch đảo trừu tượng tồi tệ nhất
- 4. Cú pháp mượt mà, hấp dẫn nhất mà bạn đã tìm thấy để xác nhận tính chính xác của thông số trong C# là gì?
- 5. PLINQ Thực hiện tồi tệ hơn thông thường LINQ
- 6. Tuyên bố LINQ ấn tượng nhất mà bạn đã gặp phải là gì?
- 7. Tai nạn cơ sở dữ liệu tồi tệ nhất xảy ra với bạn trong sản xuất là gì?
- 8. Liệu iframe có phải là một ý tưởng tồi tệ?
- 9. CSS injection: điều tồi tệ nhất có thể xảy ra là gì?
- 10. Việc sử dụng kho lưu trữ nguồn thông minh nhất mà bạn từng thấy là gì?
- 11. Cú pháp cho ORDERBY trong LINQ của VB.NET là gì?
- 12. Việc sử dụng cú pháp: = cú pháp là gì?
- 13. Các nguồn lực tốt nhất mà bạn đã thấy để học WCF là gì? (sách, trang web, v.v.)
- 14. Thời gian chạy tốt nhất/tồi tệ nhất/trung bình Big-O của cấu trúc dữ liệu Trie là gì?
- 15. "Cú pháp 3D" là gì?
- 16. Hành vi người dùng bất hợp lý nhất mà bạn đã chứng kiến là gì?
- 17. Việc lạm dụng mixin là điều ác và các giải pháp thay thế là gì?
- 18. MySQL có thực sự tồi tệ không?
- 19. Mẫu thiết kế tốt nhất mà bạn từng thấy là gì?
- 20. "Cú pháp đã sửa đổi" trong OCaml là gì?
- 21. Một số dự án mã nguồn mở tốt nhất mà bạn đã xem là gì?
- 22. Phương pháp tốt nhất để thu thập dữ liệu về việc sử dụng ứng dụng của bạn là gì?
- 23. Trình trợ giúp chuỗi hữu ích nhất mà bạn đã gặp phải là gì?
- 24. Phân tích cú pháp là gì?
- 25. Điều duy nhất hiệu quả nhất mà bạn đã làm để cải thiện kỹ năng mềm của bạn là gì?
- 26. Cây cú pháp trừu tượng là gì?
- 27. Dự phòng và phụ thuộc: tồi tệ hơn?
- 28. Cú pháp tệp Diff là gì
- 29. Cú pháp lambda mới là gì?
- 30. Cú pháp `& ::` trong CSS LESS là gì?
Tại sao mọi người lại có thể bỏ qua.Đầu tiên khi họ có thể làm ElementAt? ;) –
Ở phía đối diện của đồng xu, có những người nghĩ rằng biểu thức truy vấn là cách duy nhất để sử dụng cơ sở dữ liệu. http://stackoverflow.com/q/16904331/34397 – SLaks