Thứ bảy, ngày 3 tháng 12 năm 2016

Biểu thức Lambda

Ngày đăng: 6/1/2011, 20:31:39AM | Lượt xem: 3,774
Hot!
tag ,

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:

code
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:

code
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:

code
(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:

code
(string s) =>{ System.Console.Write(s.Length); };
 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.