Java 8 - Các Tính Năng Mới

Xin chào các nhà pháp sư Java tương lai! Tôi rất vui mừng được bắt đầu hành trình thú vị này cùng các bạn vào thế giới của Java 8. Là một giáo viên khoa học máy tính gần gũi, tôi đã chứng kiến biết bao sinh viên từ những người mới tập code trở thành những tài năng lập trình. Hôm nay, chúng ta sẽ khám phá một số tính năng thú vị mà Java 8 mang lại. Hãy lấy nước uống yêu thích của bạn, ngồi thoải mái, và cùng chúng tôi lặn sâu vào!

Java 8 - New Features

Biểu Thức Lambda

Hãy tưởng tượng bạn đang ở một buổi tiệc, và ai đó yêu cầu bạn giới thiệu bản thân nhanh chóng. Bạn sẽ không bắt đầu với câu chuyện cuộc đời của mình, phải không? Bạn sẽ đưa ra một lời giới thiệu ngắn gọn, ngọt ngào. Đó chính xác là những gì biểu thức lambda trong Java - những định nghĩa hàm nhanh chóng, ngắn gọn!

Hãy xem một ví dụ đơn giản:

// Trước Java 8
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("Hello, old Java!");
}
};

// Với Lambda Java 8
Runnable runnableLambda = () -> System.out.println("Hello, Lambda!");

Trong ví dụ này, chúng ta đang tạo một đối tượng Runnable. Biểu thức lambda () -> System.out.println("Hello, Lambda!"); là cách viết ngắn gọn hơn để định nghĩa phương thức run(). Nó giống như nói, "Khi bạn chạy này, hãy in ra 'Hello, Lambda!'".

Tại Sao Biểu Thức Lambda Lại Đáng Thương

  1. Chúng làm cho mã của bạn dễ đọc hơn.
  2. Chúng cho phép bạn treats tính năng như một đối số phương thức.
  3. Chúng giúp bạn viết mã gọn hơn.

Tham Chiếu Phương Thức

Tham chiếu phương thức giống như người bạn thông minh luôn biết con đường ngắn nhất. Chúng cung cấp một cách dễ dàng hơn để tham chiếu các phương thức hoặc constructors.

Dưới đây là một ví dụ ngon lành:

List<String> fruits = Arrays.asList("apple", "banana", "cherry");

// Sử dụng lambda
fruits.forEach(fruit -> System.out.println(fruit));

// Sử dụng tham chiếu phương thức
fruits.forEach(System.out::println);

Trong ví dụ này, System.out::println là một tham chiếu phương thức. Nó nói, "Đối với mỗi quả, sử dụng phương thức println của System.out".

Phương Thức Mặc Định

Phương thức mặc định giống như người bạn luôn có kế hoạch dự phòng. Chúng cho phép bạn thêm các phương thức mới vào các interface mà không làm断裂 các thực hiện hiện có.

public interface Vehicle {
default void startEngine() {
System.out.println("Vroom! Engine started.");
}
}

public class Car implements Vehicle {
// Không cần phải thực hiện startEngine()
}

Car myCar = new Car();
myCar.startEngine(); // Xuất: Vroom! Engine started.

Ở đây, startEngine() là một phương thức mặc định trong interface Vehicle. Bất kỳ lớp nào thực hiện Vehicle đều nhận được phương thức này miễn phí!

API Stream

API Stream giống như một线路 sản xuất siêu hiệu quả cho dữ liệu của bạn. Nó cho phép bạn xử lý các bộ đối tượng một cách声明.

Hãy xem nó trong hành động:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

// Tích của các số chẵn
int sum = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();

System.out.println("Tích của các số chẵn: " + sum);

Mã này giống như nói, "Lấy danh sách này, giữ lại các số chẵn, chuyển đổi chúng thành int, và tính tổng chúng". Đó là tất cả!

Lớp Optional

Lớp Optional giống như một mạng an toàn cho các giá trị null. Nó giúp ngăn chặn những lỗi NullPointerException.

String name = null;
Optional<String> optionalName = Optional.ofNullable(name);

// Thay vì: if (name != null) { ... }
optionalName.ifPresent(n -> System.out.println("Hello, " + n));

// Or provide a default value
String greeting = optionalName.orElse("stranger");
System.out.println("Hello, " + greeting);

Với Optional, bạn luôn sẵn sàng, dù bạn có giá trị hay không!

API Ngày Thời Gian Mới

Java 8 đã giới thiệu một API ngày và giờ mới, dễ sử dụng và trực quan hơn so với java.util.Date cũ.

LocalDate today = LocalDate.now();
System.out.println("Ngày hôm nay: " + today);

LocalTime currentTime = LocalTime.now();
System.out.println("Thời gian hiện tại: " + currentTime);

LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println("Ngày và giờ hiện tại: " + currentDateTime);

// Thêm 1 tuần vào ngày hiện tại
LocalDate nextWeek = today.plusWeeks(1);
System.out.println("Ngày sau 1 tuần: " + nextWeek);

API này làm cho việc làm việc với ngày và giờ dễ dàng như kiểm tra đồng hồ!

Động Cơ JavaScript Nashorn

Cuối cùng, Java 8 đã giới thiệu động cơ JavaScript Nashorn, cho phép bạn chạy mã JavaScript trong các ứng dụng Java của bạn. Đó giống như có một người bạn biết hai ngôn ngữ có thể dịch giữa Java và JavaScript!

import javax.script.*;

public class NashornExample {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("nashorn");

engine.eval("print('Hello from JavaScript!');");
}
}

Mã này chạy JavaScript ngay trong chương trình Java của bạn. Thật tuyệt vời phải không?

Tóm lại, Java 8 đã mang lại rất nhiều tính năng thú vị giúp việc lập trình dễ dàng, hiệu quả hơn và thú vị hơn. Như chúng ta đã thấy, những tính năng này không chỉ là những tính năng phụ - chúng là những công cụ mạnh mẽ có thể cải thiện mã của bạn rất nhiều.

Nhớ rằng, học lập trình là một hành trình. Đừng lo lắng nếu mọi thứ không ngay lập tức hiểu rõ. Hãy tiếp tục thực hành, tiếp tục khám phá, và quan trọng nhất, hãy tiếp tục vui vẻ! Trước khi bạn biết điều đó, bạn sẽ viết Java như một chuyên gia. Chúc các bạn vui vẻ khi lập trình, các ninja Java tương lai!

Credits: Image by storyset