Java loại bỏ đoạn code "public static void main" khét tiếng với điểm khởi đầu mới được đơn giản hóa

Nhóm Cộng đồng BigGo
Java loại bỏ đoạn code "public static void main" khét tiếng với điểm khởi đầu mới được đơn giản hóa

Java cuối cùng đã giải quyết một trong những khía cạnh bị chỉ trích nhiều nhất - điểm khởi đầu dài dòng và khó hiểu đã gây khó khăn cho người mới bắt đầu trong nhiều thập kỷ. Với việc giới thiệu JEP 445 (Unnamed Classes and Instance Main Methods) trong Java 21 và JEP 512 trong Java 25, các nhà phát triển giờ đây có thể viết các chương trình đơn giản mà không cần khai báo truyền thống public static void main(String[] args) - thứ đã trở thành nguồn gốc của sự thất vọng kể từ những ngày đầu của ngôn ngữ này.

Thay đổi này đại diện cho một sự chuyển hướng đáng kể trong cách tiếp cận của Java đối với lập trình thân thiện với người mới bắt đầu. Thay vì yêu cầu sinh viên phải ghi nhớ thứ mà nhiều người gọi là câu thần chú bí ẩn, các chương trình Java mới giờ đây có thể bắt đầu với một hàm void main() đơn giản, loại bỏ nhu cầu phải hiểu về các lớp, phương thức tĩnh và bộ điều chỉnh truy cập trước khi viết dòng code đầu tiên.

Sự phát triển của điểm khởi đầu Java

Cú pháp truyền thống ( Java 1.0-20):

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("What is your name? ");
        String name = scanner.nextLine();
        System.out.println("Hello, " + name);
    }
}

Cú pháp đơn giản hóa mới ( Java 21+):

void main() {
    var name = IO.readln("What is your name? ");
    IO.println("Hello, " + name);
}

Tác động giáo dục

Cộng đồng giáo dục lập trình từ lâu đã phải vật lộn với điểm khởi đầu dài dòng của Java. Nhiều giảng viên thấy mình phải nói với sinh viên rằng hãy bỏ qua phần này trước khi dạy các khái niệm lập trình cơ bản. Điều này tạo ra một trải nghiệm học tập khó xử khi sinh viên phải chấp nhận đoạn code mẫu bí ẩn mà không hiểu mục đích của nó.

Cú pháp đơn giản hóa mới giải quyết trực tiếp thách thức sư phạm này. Sinh viên giờ đây có thể tập trung vào các khái niệm lập trình cốt lõi như biến, vòng lặp và nhập/xuất cơ bản mà không bị choáng ngợp bởi các khái niệm hướng đối tượng mà họ chưa sẵn sàng hiểu. Thay đổi này đưa Java phù hợp hơn với các ngôn ngữ như Python và Ruby - những ngôn ngữ truyền thống được ưa chuộng cho các khóa học lập trình nhập môn.

Triển khai kỹ thuật và hạn chế

Mặc dù có cú pháp đơn giản hóa, Java vẫn không hoàn toàn từ bỏ gốc rễ hướng đối tượng của mình. Cách tiếp cận mới sử dụng các lớp không tên - về cơ bản là các wrapper lớp ngầm định mà trình biên dịch tạo ra ở hậu trường. Khi bạn viết một hàm void main() đơn giản, trình biên dịch Java vẫn tạo ra cấu trúc lớp truyền thống, nhưng ẩn đi sự phức tạp này khỏi nhà phát triển.

Tuy nhiên, tính năng này đi kèm với những hạn chế quan trọng. Cú pháp đơn giản hóa chỉ hoạt động cho các chương trình một file và không thể được sử dụng trong các ứng dụng lớn hơn, đa lớp. Ngoài ra, trong khi bạn có thể định nghĩa các hàm cấp cao nhất khác cùng với main, những chương trình này vẫn không thể được import hoặc tham chiếu từ các file Java khác, khiến đây chủ yếu là công cụ cho việc học tập và scripting đơn giản hơn là phát triển production.

Các Đề xuất Cải tiến Java (JEPs) Chính

  • JEP 445: Các Lớp Không Tên và Phương thức Main Thể hiện ( Java 21 )
  • JEP 512: Khai báo Import Module ( Java 25 )
  • JEP 511: Các cải tiến import module bổ sung

Hạn chế của Cú pháp Mới:

  • Chỉ hoạt động cho các chương trình một file
  • Không thể được import bởi các file Java khác
  • Chủ yếu dành cho việc học tập và scripting đơn giản
  • Cú pháp truyền thống vẫn được yêu cầu cho các ứng dụng đa lớp

Phản ứng cộng đồng và ý nghĩa rộng hơn

Phản ứng của cộng đồng lập trình khá trái chiều nhưng nhìn chung là tích cực. Nhiều nhà phát triển bày tỏ sự nhẹ nhõm khi cuối cùng thấy Java giải quyết thứ mà họ coi là rào cản không cần thiết. Một số xem thay đổi này như một phần trong sự tiến hóa rộng hơn của Java hướng tới việc trở nên thân thiện hơn với nhà phát triển, theo sau việc bổ sung các tính năng như lambda expressions, từ khóa var và records trong những năm gần đây.

Đoạn code mẫu đó kỳ lạ thay lại hữu ích khi tôi bắt đầu... nhưng đó chỉ là hội chứng Stockholm. Hãy nghĩ về điều này: còn những rác rưởi điên rồ nào khác bạn có thể thêm vào mà vô dụng cho người mới bắt đầu nhưng 'sẽ có ý nghĩa sau này'?

Những người chỉ trích cho rằng thay đổi này chỉ đại diện cho cải tiến bề mặt và không giải quyết các vấn đề văn hóa sâu sắc hơn của Java xung quanh việc over-engineering và trừu tượng hóa quá mức. Những người khác lo lắng rằng việc ẩn cấu trúc lớp có thể gây nhầm lẫn cho sinh viên khi họ cuối cùng cần hiểu bản chất hướng đối tượng của Java cho việc phát triển thực tế.

Nhìn về tương lai

Sự đơn giản hóa này phản ánh nỗ lực liên tục của Java để duy trì sự phù hợp trong bối cảnh ngôn ngữ lập trình ngày càng cạnh tranh. Các ngôn ngữ như Kotlin, Scala và thậm chí các phiên bản mới hơn của C# đã cung cấp cú pháp ngắn gọn hơn trong nhiều năm, tạo áp lực lên Java để hiện đại hóa cách tiếp cận của mình.

Trong khi cú pháp truyền thống public static void main(String[] args) vẫn được hỗ trợ đầy đủ để tương thích ngược, điểm khởi đầu đơn giản hóa mới đại diện cho một sự chuyển hướng triết lý hướng tới việc làm cho Java dễ tiếp cận hơn với người mới đến trong khi vẫn duy trì khả năng cấp doanh nghiệp cho các nhà phát triển có kinh nghiệm.

Thay đổi này có thể có vẻ nhỏ, nhưng đối với hàng triệu sinh viên sẽ gặp Java như ngôn ngữ lập trình đầu tiên của họ, nó loại bỏ một rào cản đầu tiên đáng kể và cho phép họ tập trung vào việc học các nguyên tắc cơ bản của lập trình thay vì ghi nhớ những câu thần chú khó hiểu.

Tham khảo: public static void main(String[] args) is dead