thucnguyenblog logo

Biểu thức Lambda

thucnguyenit35
19/08/2016 - 06:04:00

Biểu thức lambda là một phương cách mới trong việc tạo các hàm vô danh (anonymous). Nó có thể chứa các câu lệnh cũng như các biểu thức khác. Một biểu thức Lambda trả về kết quả của một biểu thức và có dạng như sau:

(input parameters) => expression

 

Dấu mở và đóng ngoặc là tùy chọn trong trong trường hợp chỉ có 1 tham số, ngược lại nó là bắt buộc. Nếu có nhiều hơn 1 tham số thì chúng sẽ được phân cách bằng dấu phẩy (,). Kiểu của các tham số có thể được khai báo tường minh hoặc không, nếu không khai báo, trình duyệt sẽ tự xác định kiểu, tuy nhiên trong một số trường hợp, bạn phải chỉ rõ kiểu của nó, ví dụ:

s => s.Length (lỗi, vì trình dịch không thể biết được s là gì)

bạn khải khai báo như sau:

(string s) => s.Length

Một biểu thức lambda dùng toán tử =>, mang ý nghĩa như là “đi đến”. Phía bên trái của toán tử là các tham số (nếu có), bên phải là các biểu thức hay câu lệnh. Ví dụ như biểu thức lambda x => x * x sẽ tương đương với hàm sau:

int f(int x) {

return x * x;

}

Một biểu thức lambda có thể được dùng để tạo các delegate giống như sau:
delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5);

Toán tử => có cùng độ ưu tiên như phép gán = và được xét từ phải sang trái, do vậy câu lệnh d = x => x * x sẽ có ý nghĩa khác với x => d = x * x. Ở câu lệnh thứ nhất, d sẽ có kiểu delegate và nó đại diện cho biểu thức lambda x => x*x, câu lệnh thứ 2 hoàn toàn là 1 biểu thức lambda, trong đó d sẽ mang giá trị của bình phương giá trị được truyền vào.

Các biểu thức lambda thường được dùng trong các câu truy vấn LINQ như là các tham số của các mệnh đề truy vấn kiểu như Where.

Các biểu thức lambda không được phép xuất hiện bên trái toán tử is hay as. Và các hạn chế của phương thức anonymous cũng được áp dụng cho biểu thức lambda.

Trong phần thân của một biểu thức lambda, bạn có thể thực hiện các lời gọi hàm, tuy nhiên cần chú ý là nếu biểu thức của bạn sẽ được thực thi trong một môi trường khác, kiểu như thực thi bên trong SQL Server, bạn không được dùng các lời gọi hàm vì các phương thức bạn gọi có thể không có ý nghĩa trong môi trường đó. Ví dụ như biểu thức sau có thể sẽ không dùng được nếu được viết bên trong một thủ tục CLR:

(int x) => { MessageBox.Show(x.ToString()); return x * 10; };

Các biểu thức lambda có thể không trả về giá trị, chẳng hạn: (string s) =>{ System.Console.Write(s.Length); };


Tags: C# Lambda
 Author infomation:
Xin chào các bạn! Tôi tên là Thức, tôi sinh ra và lớn lên tại quê hương Yên Mỹ, Yên Mô, Ninh Bình, từ thời Trung học tôi đã yêu thích tin học và công nghệ. Tôi tốt nghiệp ngành Công nghệ thông tin tại Đại học Mở Hà Nội, hiện tại tôi đang là một Web Developer. Tôi tạo ra blog này nhằm mục đích chia sẻ kinh nghiệm, kiến thức mà tôi đã trải qua trong cuộc sống, vì thế sẽ có thể thiếu sót mong các bạn đóng góp để giúp tôi hoàn thiện hơn.
 Share:

 Related Post