- Java thường được biết đến là phù hợp với các dự án quy mô lớn, dài hạn, nhưng cũng có thể là một công cụ xuất sắc cho những tác vụ nhỏ
- Kiểm tra kiểu tĩnh và hỗ trợ công cụ tuyệt vời cũng là những lợi thế lớn ngay cả với các tác vụ nhỏ
- Những cải tiến ngôn ngữ gần đây khiến Java trở nên hữu ích hơn nữa
Chạy không cần biên dịch
Cú pháp gọn hơn: phương thức main của instance và lớp ngầm định
- JEP 477: đơn giản hóa việc viết các chương trình nhỏ và script
- Loại bỏ cú pháp rườm rà trước đây (
public static void main):
var someVariable = initialValue;
String helper(int param) { ... }
void main(String[] args) {
...
}
- Tự động import module
java.base, tăng tính tiện dụng
- Các phương thức
println, print, readln cũng được tự động import
Records và Enums
- Records: biểu diễn dữ liệu có cấu trúc thay cho dictionary của Python
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}
- Enums: cách biểu diễn kiểu liệt kê trực quan hơn Python
enum Direction { NORTH, EAST, SOUTH, WEST };
Các tính năng ngôn ngữ và API hữu ích
- Sử dụng
var: có thể dùng biến mà không cần khai báo kiểu trong script
static import: giúp viết phép tính toán học ngắn gọn hơn
import static java.lang.Math.*;
var diagonal = sqrt(pow(width, 2) + pow(height, 2));
- Text block: giữ code và dữ liệu cùng nhau, đồng thời cải thiện khả năng đọc
- Thư viện mạnh mẽ cho chuỗi, biểu thức chính quy, collection, ngày/giờ
- Đọc tệp:
var content = Files.readString(Path.of(filename));
- Chạy tiến trình bên ngoài:
String run(String... cmd) throws Exception {
var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();
process.waitFor();
return new String(process.getInputStream().readAllBytes());
}
Xử lý dependency và JBang
- JBang: có thể thêm dependency Maven trực tiếp vào tệp mã nguồn
//DEPS org.eclipse.angus:jakarta.mail:2.0.3
- Sau đó có thể chạy như sau
jbang MailMerge.java
- Chuyển script thành tệp thực thi:
///usr/bin/env jbang "$0" "$@" ; exit $?
Môi trường notebook
Ưu điểm của notebook
- Lập trình khám phá: phù hợp để xử lý dữ liệu và chạy code dùng một lần hoặc quy mô nhỏ
- Cấu trúc ô mã và ô văn bản:
- Kết quả chạy ô mã có thể hiển thị dưới dạng văn bản, bảng, hình ảnh, âm thanh hoặc video
- Có thể lặp lại quá trình thử và sai để đạt kết quả mong muốn rồi thêm chú thích
- Tốt hơn JShell:
- Làm việc theo từng ô dễ hơn
- Có thể xem bảng dữ liệu và biểu đồ một cách trực quan
- Dễ lưu và chia sẻ
Jupyter và notebook Java
- Jupyter notebook: công cụ được các nhà khoa học dữ liệu Python sử dụng rộng rãi
- Có thể chạy cục bộ hoặc trên đám mây (ví dụ: Google Colab)
- Công nghệ Jupyter độc lập ngôn ngữ:
- Có thể cài kernel cho nhiều ngôn ngữ khác nhau (ví dụ: IJava, JJava, Ganymede, Rapaio)
- Jupyter Java Anywhere: đơn giản hóa việc cài kernel Java bằng cách tận dụng JBang
- Hạn chế:
- Mỗi kernel có cách xử lý dependency và hiển thị kết quả phi văn bản khác nhau
- Kernel IJava có một số vấn đề trong việc phân giải dependency
- Oracle hoặc các vendor lớn cần cung cấp dịch vụ Colab dành riêng cho Java
Xử lý dữ liệu và trực quan hóa trong Java
- Python dễ xử lý dữ liệu nhờ các thư viện như NumPy và Matplotlib
- Java vẫn còn thiếu một hệ sinh thái tương đương
- tablesaw:
- Có thể dùng như một lựa chọn thay thế cho NumPy
- Hỗ trợ trực quan hóa bằng gói JavaScript Plot.ly
Dự án JTaccuino
- JTaccuino:
- Notebook Java đang được Sven Reimers phát triển
- Cung cấp UI thân thiện với người dùng dựa trên JavaFX
- Sử dụng JShell làm backend
- Vẫn ở giai đoạn đầu nhưng có nhiều tiềm năng phát triển
Kotlin notebook
- Có plugin Kotlin Notebook cho IntelliJ dành cho nhà phát triển Kotlin
Kết luận
- Nếu tận dụng đúng công cụ, Java là một lựa chọn rất hiệu quả để xử lý các tác vụ nhỏ
- JBang giúp việc viết script dùng thư viện bên thứ ba trở nên dễ dàng
- Java cũng có tiềm năng trong lập trình khám phá, nhưng hỗ trợ công cụ vẫn cần được cải thiện
2 bình luận
Khi dùng cho mục đích scripting đơn giản thì các ngôn ngữ có kiểu động vốn rất tiện...
Tất nhiên khi vượt ra khỏi giai đoạn nguyên mẫu thì tôi sẽ dùng ngôn ngữ tĩnh.
Ý kiến trên Hacker News
Đã tìm ra cách chạy chương trình "Hello World" rất đơn giản. So với đoạn mã phức tạp trước đây thì giờ đơn giản hơn nhiều.
varvàrecordđặc biệt hữu ích.java myfile.java, và tính năng tự động importjava.baserất tiện.Dùng Java, JavaScript và TypeScript, nhưng với scripting thì dùng .NET và LINQPad. Nhờ LINQ nên việc viết script trở nên dễ dàng.
Vào thời phát triển JDK 1.1, chưa có sự đồng thuận về test suite. Mark Reinhold đã từ chối kiểu kiểm thử dạng JCK và viết một test harness đơn giản.
Ngôn ngữ phát triển theo thời gian. Java giờ đã nhanh hơn, có thêm generics và suy luận kiểu đơn giản nên giảm bớt mã boilerplate.
PHP cũng là một ngôn ngữ hữu ích. Nó được cài sẵn trên nhiều hệ thống *nix và có thư viện chuẩn tiện cho xử lý tệp, JSON và network request.
Trong Java 23, ba phương thức của
java.io.IOđược tự động import. Đây là một kiểu mới và có thể dùng với tùy chọn--enable-preview.Đã học cách viết "Java một tệp" trên Hacker Rank, và nó hữu ích khi giải các bài toán coding trên bảng trắng.
Nếu muốn biết lý do có main method đơn giản, đáng để tham khảo JEP 495. Dự kiến sẽ được đưa vào JDK 24.
Dùng Java cho mọi script hay công việc lập trình, và đã dùng trong công ty hơn 5 năm. Rất hài lòng với việc Java tiếp tục phát triển.