7 điểm bởi GN⁺ 2024-12-20 | 2 bình luận | Chia sẻ qua WhatsApp
  • 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ĩnhhỗ 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

  • Nhờ JEP 330JEP 458, có thể chạy trực tiếp tệp mã nguồn Java:
    java RandomFiles.java 10 /home/cay/data  
    
  • Mỗi lần chạy sẽ tự động được biên dịch, rất hữu ích cho phát triển và kiểm thử
  • Có thể dùng Graal để chuyển thành tệp thực thi native, nhưng trong đa số trường hợp khác biệt hiệu năng là không đáng kể

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ư NumPyMatplotlib
    • 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

  • 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

 
aer0700 2024-12-24

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.

 
GN⁺ 2024-12-20
Ý 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.

    • Khi dùng Java 21, cảm thấy mã nguồn bớt rườm rà hơn. varrecord đặc biệt hữu ích.
    • Đang giải các bài AoC theo cách java myfile.java, và tính năng tự động import java.base rấ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.

    • Tôn trọng Python nhưng thấy nó khó đọc. Không quen với cú pháp của PHP và Python.
  • 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.

    • Tính năng hữu ích nhất với lập trình viên Java là hot reload trong debugger. Việc viết mã nhờ đó dễ hơn rất nhiều.
  • 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.