JAVA 8: Bạn đã biết hết về Lambdas, Streams, and functional-style programming? (Phần 1)

19:44 10/05/2021
  1. Những tính năng nào mới có trong JAVA8

Vào năm 2014 Oracle đã phát hành một phiên bản có tên Java 8. Đây là một phiên bản mang tính cách mạng của java, nó bao gồm các nâng cấp khác nhau cho lập trình Java, JVM, Tools và các thư viện. Có rất nhiều tính năng và cải tiến mới nhưng quan trọng nhất là các tính năng sau:

  • Lambda Expressions − Biểu thức lambda là một khối mã ngắn lấy tham số và trả về giá trị. Các biểu thức Lambda tương tự như các phương thức, nhưng chúng không cần tên và chúng có thể được triển khai ngay trong phần thân của một phương thức.
  • Method References − hay còn được gọi là phương thức tham chiếu liên quan đến việc sử dụng biểu thức lambda.
  • Optional − Đây là một lớp nằm trong gói java.util, nó giúp hạn chế lỗi NullPointerException trong ứng dụng.
  • Functional Interface – là một interface chứa tối đa một abstract method. @FunctionalInterface đảm bảo cho interface chỉ có duy nhất một abstract method.
  • Default methods – Cung cấp phương thức mặc định cho Interface và abstract methods.
  • Nashorn, JavaScript Engine − cho phép chạy JavaScript trên máy ảo JVM.
  • Stream API – bao gồm class và interface của Stream API cho phép thao tác kiểu function trên các phần tử của Collection, Array.
  • Date and Time API − Cung cấp một số lớp mớ trong gói java.time cùng với định dạng thời gian Joda.
Các tính năng trong Java 8

2. Dự án Lambda là gì?

Đoạn tóm tắt ngắn gọn về lịch sử của dự án Lambda sẽ giúp bạn có cái nhìn lịch sử và sự hình thành của dự án này. Chắc bạn sẽ không quá xa lạ với: James Gosling cha đẻ của ngôn ngữ lập trình Java và Mark Reinhold kiến trúc sư trưởng bộ phân JSE tại Oracle.

  • 2006 – James Gosling: “Chúng tôi sẽ không bao giờ có lambdas trong Java”
  • 2007 – 3 đề xuất khác nhau cho lambdas trong Java
  • 2008 – Mark Reinhold: “Chúng tôi sẽ không bao giờ có lambdas trong Java”
  • 2009 – Bắt đầu dự án Lambda (JSR 335)
  • 2014 – Java 8 được phát hành và bao gồm Lambda expression bên trong nó

Trước khi ra bản Java 8 chủ yếu các lời gọi đến method/function sẽ được thực hiện bằng cách sử dụng các Class hoặc Object bởi các method/function không tồn tại độc lập. Nhưng khi bản Java 8 có một khái niệm mới đó là “functional-style programming” được giới thiệu. Bởi vậy, chúng ta có thể dễ dàng sử dụng các “anonymous functions” tạo điều kiện cho lập trình viên lập trình Functional. Lambda Expressions (Biểu thức Lambda) có thể hiểu là một hàm ẩn danh, cho phép lập trình viên chuyển các phương thức làm đối số nhằm rút ngắn câu lệnh đi rất nhiều.

Lưu ý: Lambda Expressions là một biểu thức không có tên và không thuộc bất kỳ Class nào, không có Access Modifier(phạm vi truy cập), không có kiểu trả về.

3. Tại sao sử dụng Lambda Expressions

    • Giảm lượng code phải code.
    • Cung cấp đầy đủ cho Functional Interface
Thông báo lỗi ngay khi có 1 phương thức trừu tượng

4. Cú pháp của Lambda Expressions

Cú pháp của Lambda Expressions {body}” v:shapes=”Text_x0020_Box_x0020_2″>

  • Argument-list: Nó có thể rỗng hoặc có thể có một hoặc nhiềm tham số
  • Arrow-token: Mũi tên được sử dụng để liên kết arguments-list và thân của biểu thức.
  • Body: Nó chứa các biểu thức và câu lệnh cho biểu thức Lambda.

Chúng ta có thể viết biểu thức lambda bằng nhiều cách tùy thuộc và việc sử dụng nó trong một số trường hợp sau:

Kiểu dữ liệu Không cần phải khai báo kiểu dữ liệu cho các tham số truyền vào vì trình biên dịch sẽ tự luận ra kiểu dữ liệu.
Dấu () Trường hợp chỉ truyền vào một tham số duy nhất thì có thể bỏ qua dấu () và nhiều hơn 1 tham số thì ngược lại.
Dâu {} Nếu trong body code chỉ thực hiện 1 statement thì loại bỏ luôn dấu{} và nhiều hơn thì ngược lại.
Lệnh return Nếu chỉ có 1 câu lệnh trong biểu thức có thể sử dụng hoặc không sử dụng từ khóa return. Phải sử dụng return khi biểu thức chứa nhiều câu lệnh.

 

So sánh Method và Lambda
Thành phần Method Lambda
Tên phương thức Có tên cho phương thức Không có tên cho phương thức
Các tham số Không hoặc nhiều tham số Không hoặc nhiều tham số
Body Code Có biểu thức và câu lệnh xử lý Có biểu thức và câu lệnh xử lý
Return Type Có kiểu dữ liệu trả về Không có kiểu trả về tương minh do trình biên dịch có thể tự suy luận  ra kiểu dữ liệu trả về dựa vào code thực thi.

5. Các ví dụ tiêu biểu của biểu thức Lambda.

    • Biểu thức lambda cơ bản:
Output : Ví dụ đầu tiên về lambda

6. Biểu thức Lambda không có tham số:

Output: Không tham số…

7. Biểu thức Lambda có một tham số duy nhất:

Output: Poly chào bạn DungNA

8. Biểu thức lambda có nhiều tham số sử dụng hoặc không sử dụng từ khóa return

9. Biểu thức lambda với vòng lặp Foreach

10. Biểu thức lambda tạo Thread

11. Biểu thức lambda với Filter Collection

Output : Minhdq: 8.0 Dungna: 7.5 Thienth: 5.2 Sontv: 6.2

12. Phạm vi truy cập trong biểu thức lambda

Bạn có thể truy cập bất kỳ biến Final, Static hoặc biến chỉ được gán một lần nếu cố tình gán lần 2 thì trong biểu thức lambda sẽ Throw một lỗi biên dịch.

Kết luận

Trong bài viết phần 1 về Java 8 giúp các bạn có cái nhìn tổng quan về một phiên bản mang tính cách mạng của Java, có rất nhiều nâng cấp khác nhau nhưng mục tiêu cuối cùng là giúp các lập trình viên tiết kiệm được thời gian gõ code và không gian trình bầy code hơn. Rõ ràng trong phiên bản này Lambda Expression là một tính năng rất thú vị và nó đã góp phần thay đổi xu hướng lập trình trong Java. Hãy cùng khám phá các tính năng thú vị khác trong những bài viết sau nhé!

Cùng chuyên mục

Đăng Kí học Fpoly 2023

Bình Luận