Khái niệm mã: Lambdas của .NET

Chuỗi khái niệm về Mã của tôi đã hoạt động theo hướng tổng thể: Trong một vài tháng, chúng tôi sẽ tập hợp một số bài học mà chúng tôi đã học được vào một công cụ quy tắc tùy chỉnh cực kỳ tuyệt vời. Trong thực tế, nó sẽ rất tuyệt vời, rằng nó thực sự sẽ tự viết. (Bắt kịp các cột trước trong chuỗi: Khái niệm mã: Phương thức mở rộng của C # và khái niệm mã: Từ khóa var của C #.)

Lambdas là gì?

Lambda là một phím tắt để viết một phương thức ẩn danh. Về mặt chức năng, lambdas phục vụ cùng một mục đích như các hàm ẩn danh và có cú pháp rõ ràng hơn nhiều. Lambdas được gán với toán tử =>. Lambdas là đại biểu và có thể được sử dụng thay cho họ. Lambdas không có kiểu trả về bằng với loại Action chung và lambdas có kiểu trả về bằng với kiểu Func.

Khi tạo lambda, bạn cần ba phần tử: một biến để gán lambda, danh sách tham số và thân phương thức.

  • Một biến để gán lambda cho: Đây có thể là một loại đại biểu cụ thể hoặc một trong hai loại đại biểu chung.
  • Danh sách tham số: Nếu có nhiều tham số đầu vào, danh sách này phải được đặt trong dấu ngoặc đơn và các tham số phải được phân tách bằng dấu phẩy. Nếu chỉ có một tham số, dấu ngoặc đơn là tùy chọn. Bạn có thể bỏ qua các loại, vì trình biên dịch có thể suy ra các loại dựa trên khai báo biến.
  • Phần thân phương thức : Điều này phải được đặt trong dấu ngoặc nhọn nếu nó có nhiều hơn một câu lệnh. Nếu bạn sử dụng dấu ngoặc nhọn, bạn cần một dấu kết thúc câu lệnh (dấu chấm phẩy) sau dấu ngoặc nhọn.

Bạn có thể tự hỏi tại sao tôi lại nói về niềng răng xoăn như thể VB.NET không tồn tại. Thật không may, tại thời điểm này, lambdas về cơ bản là vô dụng trong VB.NET vì VB.NET không thể giải quyết lambdas kéo dài hơn một dòng. Phiên bản tiếp theo của VB.NET (Visual Basic 10 trong .NET 4) sẽ hỗ trợ nhiều dòng lambdas thông qua tính năng tiếp tục câu lệnh tự động mới.

Chúng ta hãy xem một lambda rất đơn giản để cảm nhận cú pháp:

 Func SimpleLambda1 = (input1, input2) 

=> String.Format ("{0} lần {1} = {2}",

input1, input2, input1 * input2);

Điều này tạo ra một lambda chấp nhận hai số nguyên (được gán cho các biến cục bộ input1 và input2) và trả về một chuỗi.

Bất kỳ biến nào được khai báo trong lambda là cục bộ của nó và không thể nhìn thấy bên ngoài nó. Khi lambda được khai báo, bất kỳ biến nào mà nó sử dụng được khai báo bên ngoài lambda đều được lambda "bắt giữ" và "di chuyển" với nó, ngay cả khi lambda sau đó được thực thi trong một phạm vi có chứa một biến có cùng tên có cùng chữ ký. Đây là một số mã mẫu:

 void void RunLambda (Hành động lambdaToRun) 

{

số nhân int = 2;
 Console.WriteLine ("Chạy lambda từ xa."); 

for (int counter = 0; counter <10; counter ++)

{

số nhân ++;

lambdaToRun (quầy);

}

}
 khoảng trống tĩnh Main () 

{

số nhân int = 5;

Hành động lambda =

đầu vào => Console.WriteLine ("{0} lần {1} = {2}", đầu vào, số nhân, đầu vào * số nhân);

Console.WriteLine ("Chạy lambda cục bộ.");

for (int counter = 0; counter <10; counter ++)

{

số nhân ++;

lambda (quầy);

}
 RunLambda (lambda); 
 Console.WriteLine ("Nhấn Enter để thoát ..."); 

Bảng điều khiển.ReadLine ();

}
Nhìn vào mã này, ban đầu bạn có thể thấy rằng khi RunLambda () được thực thi, giá trị 2 được sử dụng cho biến số nhân, nhưng bạn đã sai. Hình A cho thấy đầu ra thực tế. Hình A

Giá trị của 15 được chuyển qua hàm được gọi. Đây là một quan sát rất quan trọng.

Tại sao chúng ta muốn một lambda cho một chức năng đầy đủ? Đối với một điều, lambdas là xách tay. Như bạn có thể thấy, lambdas dễ dàng được thông qua - để làm điều này với một chức năng bình thường sẽ liên quan đến cú pháp đại biểu vụng về và gián tiếp. Đối với một điều khác, lambdas khá súc tích ở mức độ cú pháp. Cú pháp cho phép nhà phát triển tập trung vào nội dung của lambda, không phải tất cả các mã cần thiết để xây dựng nó. Sự khác biệt lớn là sự tiện lợi. Bởi vì cú pháp lambda rất dễ sử dụng, bạn thấy mình làm những việc mà bạn sẽ không bao giờ làm với các đại biểu, chỉ vì nó không còn cảm thấy như một việc vặt nữa.

Tóm lược

Đây là một giới thiệu ngắn gọn về lambdas. Khi tôi đặt tất cả các phần này lại với nhau thành một công cụ quy tắc, bạn sẽ thực sự thấy lambdas hữu ích như thế nào trong thực tế.

Để được giải thích chi tiết hơn về lambdas, hãy đọc đặc tả ngôn ngữ C # 3.0 (ở định dạng Word), đặc biệt là phần 7.14.

J.Ja

Tiết lộ về các chi nhánh trong ngành của Justin: Justin James có hợp đồng với Spiceworks để viết hướng dẫn mua sản phẩm.

-------------------------------------------------- -------------------------------------

Nhận các mẹo phát triển hàng tuần trong hộp thư đến của bạn Giữ cho kỹ năng nhà phát triển của bạn trở nên sắc nét bằng cách đăng ký nhận bản tin Nhà phát triển web miễn phí của TechRepublic, được gửi vào mỗi thứ ba. Tự động đăng ký ngay hôm nay!

© Copyright 2020 | mobilegn.com