PHP Language – Vài Phút Tìm Hiểu Lambda và Closure Function
Bài đăng này đã không được cập nhật trong 5 năm
Do mình đang ngồi viết Unit Test, gặp trúng mấy hàm Callback này nọ nên dành thời gian tìm hiểu luôn về Closure và Lambda function. Sẵn tiện viết một bài chia sẽ cho các anh em một tí về Backend
Thật ra bài viết nói về chúng thì có rất nhiều trên mạng rồi, ở đây mình chỉ tóm tắt và giới thiệu cách sử dụng chúng trong chương trình thực tế mà thôi.
Các anh em có thể xem bài viết gốc của mình ở đây nhé: https://hungphamdevweb.com/php-language-vai-phut-tim-hieu-lambda-va-closure-function.html
Lambda là gì ?
Lambda hay còn gọi là hàm ẩn danh (anonymous function), chúng có thể lưu dưới dạng một giá trị của biến và được truyền như một tham số cho một hàm hoặc một phương thức khác.Cú pháp hàm Lambda function:
function (argument)
{
//code
}
Closure là gì ?
Closure là một anonymous function và nó có thể truy cập các biến bên ngoài phạm vi mà nó được tạo ra. Một đặc điểm nhận dạng Closure function là nó sẽ có từ khoáuse
phía sau tên của hàm.
Cú pháp hàm Closure function:
function (argument) use (scope) {
//code
}
Ví dụ về Closure và Lambda function
Để hiểu rõ hơn vấn đề thì chúng ta sẽ cùng nhau làm rõ qua vài ví dụ sau: ``` $input = array(1, 2, 3, 4, 5); $output = array_filter($input, function ($v) { return $v > 2; }); ``` Ở trên chúng ta có một ví dụ về Filter Input bằng việc loại bỏ những phần tử lớn 2.function ($v) { return $v > 2; }
ở đây là một Lambda function và nó được lưu dưới dạng như một giá trị đầu vào.
$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, $max_comparator);
Giả sử mình có một hàm ở trên làm thế nào để chuyển nó thành Closure function?
{
return function ($v) use ($max) { return $v > $max; };
};
$input = array(1, 2, 3, 4, 5);
$output = array_filter($input, $max_comparator(2));
Ở đây mình dùng use($max)
để biến anonymous function của mình thành Closure function và biến $max
sẽ được truyền tham khảo khi mình gọi $max_comparator(2)
Kết Luận
OK thì 2 cái này hàm này nó chỉ có nhiêu đây, tuỳ mỗi trường hợp mà chúng ta sẽ áp dụng phù hợp. Đây là một kiến thức cơ bản mà các anh em nên trang bị cho mình vì nó sẽ giúp ích rất nhiều trong việc phỏng vấn.Ngoài ra thì các anh em có thể tham khảo các nguồn bên dưới để hiểu thêm nhé:
- https://www.php.net/manual/en/class.closure.php
- https://php100.wordpress.com/2009/04/13/php-y-combinator/
All rights reserved