Tôi đang bắt đầu chương trình trong C# 2.0, vì vậy tôi chưa bao giờ sử dụng biểu thức lambda, nhưng, tại sao rất nhiều phiền phức về nó? Có phải họ chỉ là cú pháp đường xung quanh các đại biểu vô danh, hay có cái gì đó mà tôi không thể thấy?Tại sao cường điệu như vậy với hàm C# lambda?
Trả lời
Vâng, biểu thức lambda có hai điều chính trên phương pháp vô danh:
- Họ có nhiều súc tích hơn phương pháp vô danh
- Họ có thể được chuyển đổi sang expression trees cũng như các đại biểu
Trừ bạn đang sử dụng cây biểu thức, chúng rất giống với các phương thức ẩn danh. Sự khác biệt là thường bạn có thể viết một vài biểu thức lambda trong một câu lệnh (phương thức chuỗi gọi với nhau) mà không mất khả năng đọc, nhưng các phương thức nặc danh chỉ hơi quá dài dòng. Bằng cách này, nó không quá nhiều mà các biểu thức lambda là "chỉ cú pháp đường xung quanh các đại biểu vô danh" vì cả hai biểu thức lambda và các phương thức vô danh là "chỉ cú pháp đường quanh tạo đại biểu (và biểu hiện cây)."
Không giảm bớt cú pháp cú pháp - lợi ích của các chức năng ẩn danh đóng vai trò lớn, cùng với khả năng có mã đúng nơi bạn muốn, thay vì theo một phương pháp riêng.
JABTW là từ viết tắt mới của tôi trong ngày - hơi quá dài dòng. Hoàn hảo cho các đánh giá mã. –
+1 Mmmmmm ... biểu thức cây. –
Vì vậy, biểu thức được sử dụng để tổng hợp các phương thức ẩn danh có thể được thu gọn cho mã thực hiện về cơ bản cũng như các phương thức được viết theo cách thủ công? –
Chúng có thể dễ dàng được sử dụng như đường cú pháp quanh đại biểu nhưng điều lớn nhất về lambdas là trình biên dịch có khả năng biến chúng thành expression trees, mở ra nhiều khả năng (ít nhất là LINQ).
Trong khi đó là điều lớn về LINQ to SQL vv, cá nhân tôi sử dụng thực tế là họ đang terser thường xuyên hơn tôi sử dụng cây biểu hiện ... –
Tôi cũng - nhưng tôi nghĩ rằng không có cây biểu thức và LINQ C# nhóm sẽ ít có khuynh hướng thêm các biểu thức lambda vào ngôn ngữ chỉ vì lợi ích của một mình :) –
Có một cú pháp rất ngắn gọn khiến nhiều khả năng nhiều thứ hơn sẽ được xây dựng xung quanh chúng. Hãy tưởng tượng một truy vấn LINQ phức tạp mà không có bất kỳ loại đường cú pháp nào.
Tôi sợ tôi không làm LINQ. Tôi đang mắc kẹt trong C# 2.0 cho bây giờ, Vì vậy, tôi không thể tưởng tượng điều đó. Dù sao cũng cảm ơn bạn. – raven
Chúng chỉ là đường cú pháp xung quanh đại biểu ẩn danh hoặc có thứ gì đó mà tôi không thể nhìn thấy?
Tốt câu hỏi. Câu trả lời rất phức tạp. Trước hết, cây biểu hiện rõ ràng là cây lớn. Nhưng cũng có một số sự tinh tế. Dưới đây là năm rườm rà và thường xuyên điều digressing của tôi về vấn đề như thế nào lambdas là tinh tế khác biệt so với phương pháp vô danh:
Tất cả bài viết của tôi về các vấn đề liên quan đến biểu thức lambda được lưu trữ ở đây:
http://blogs.msdn.com/ericlippert/archive/tags/Lambda+Expressions/default.aspx
- 1. Tại sao LuaJIT lại tốt như vậy?
- 2. Tại sao nhà điều hành Sobel trông như vậy?
- 3. Tại sao ValueType.GetHashCode() được triển khai giống như vậy?
- 4. Tại sao khái niệm Marshalling được gọi là như vậy?
- 5. Giữ lại chu kỳ: Tại sao điều xấu như vậy?
- 6. Tại sao RAII lại được đặt tên như vậy?
- 7. Tại sao tiện ích `nm` được đặt tên như vậy?
- 8. ptr_fun với hàm lambda
- 9. Tại sao phương thức count() của container C++ STL được đặt tên như vậy?
- 10. Tại sao javac 1.5 chạy chậm như vậy so với trình biên dịch Eclipse?
- 11. Tại sao REGISTER_GLOBALS lại tệ đến vậy?
- 12. Tại sao việc biên dịch mã .NET IL dễ dàng như vậy?
- 13. Tại sao GLUT lại xấu đến vậy?
- 14. tại sao defun không giống như (setq <name><lambda>)?
- 15. PyQT Kết nối hàm lambda với Signal
- 16. ndk-gdb với nhiều thư viện như vậy
- 17. Tại sao Visual Studio sử dụng cú pháp regex lạ như vậy
- 18. Tại sao không có tăng cường :: filesystem :: move_file?
- 19. Tại sao bảng điều khiển Rails nói "không thể tải tập tin như vậy - readline"?
- 20. Tại sao rõ ràng gọi một hàm tạo trong C++
- 21. Loại hàm lambda là gì?
- 22. Tại sao các nhận xét nhiều dòng trong flex/bison lại dễ dàng như vậy?
- 23. Nên std :: sắp xếp công việc với hàm lambda trong C++ 0x/C++ 11?
- 24. (Tại sao) MySQL không thể sử dụng chỉ mục trong các trường hợp như vậy?
- 25. Tại sao có OAuth2 3 chân khi 2 chân hoạt động tốt như vậy?
- 26. Tại sao dấu gạch chéo trong dịch vụ web lại quan trọng như vậy?
- 27. Ngôn ngữ VB.NET và Không có gì: tại sao nó lại như vậy?
- 28. Tại sao mã C++ phải được chứa trong các hàm?
- 29. Tại sao IO dựa trên điều tra viên gọi là sigprocmask thường xuyên như vậy?
- 30. Tại sao EXC_BAD_ACCESS lại vô ích đến vậy?
Novelty là phần thưởng riêng của mình: http://arstechnica.com/old/content/2008/06/mri-study-suggests-novelty -is-its-own-reward.ars – Greg
Vâng, đó là một bản sao, "mục đích của lambdas" đã được yêu cầu một tỷ lần.Nhưng tôi không nghĩ mọi người dường như có ý tưởng về bản sao một cách nghiêm túc nữa. –
Vâng, đó là một bản sao, "mục đích của lambdas" đã được yêu cầu một tỷ lần. Nhưng tôi không nghĩ mọi người dường như có ý tưởng về bản sao một cách nghiêm túc nữa. –