Lambda expression trong Java là cái giề?

Tram Ho

Hãy nghĩ về lambda expression như một cú pháp rút gọn cho compiler (tương tự như khi ta lập trình trên các IDE, chỉ cần gõ psvm + Tab sẽ ra được hàm “public static void main(String[] args)”), khi compiler thấy cú pháp lambda, nó sẽ mở rộng ra thành hai phần: phần định nghĩa class và phần khởi tạo class.
Nếu bạn nghĩ nó như một công cụ để rút ngắn code lại, bạn sẽ yêu thích nó, đến mức mà bạn sẽ tìm đủ mọi cách tận dụng nó bất cứ khi nào có thể.
Hãy xem thử một ví dụ đơn giản về một trung tâm mua bán xe hơi CarMall, nơi có rất nhiều Car khác nhau:

Trong đó, CarFilter:

Với Car:

Nếu làm như cách thông thường, ta sẽ tạo một class implement interface CarFilter:

Khi đó, đoạn code để in ra tất cả car hãng Honda là:

Tuy nhiên, nếu sử dụng lambda expression, ta không cần khởi tạo class implement CarFilter, và code để in ra các car hãng Honda chỉ cần:

Cách này giúp giảm tải khoảng chục dòng code (do không phải khởi tạo CarFilterImpl).
Nhưng tại sao? Sao ta có thể code như vậy mà trình biên dịch vẫn hiểu?
Thực chất, tất cả thông tin cần có để “mở rộng” đã có sẵn trong function carMall.showCars(…). Trình biên dịch biết rằng nó cần truyền một đối tượng của class implement CarFilter interface vào trong function showCars(CarFilter filter), và rằng đối tượng này cần implement function:* boolean confirm(Car car)* bởi nó là function duy nhất trong interface. Nó cũng biết rằng nội dung trong hàm sẽ tương đương với expression: c -> c.getProducer().equals(“Honda”).
Từ đó, trình biên dịch sẽ tự động tạo ra một đoạn code như sau:

Và thế là chương trình chạy ngon lành !!
Vậy đấy, lambda thực chất rất đơn giản phải không

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo