Skip to main content

Command Palette

Search for a command to run...

Bài 7: JShell - REPL Tool (Java 11)

Published
6 min readView as Markdown

Mục tiêu

Bài viết này nhằm mục đích giúp bạn hiểu và sử dụng JShell, công cụ REPL (Read-Eval-Print Loop) được giới thiệu trong Java 11. Chúng ta sẽ xem xét cách khởi động và sử dụng JShell, các lệnh và tính năng cơ bản, và các ví dụ thực tế.

Nội dung

1. Giới thiệu về JShell

1.1 Định nghĩa và mục đích

  • Định nghĩa:

    • JShell là một công cụ dòng lệnh tương tác cho phép bạn thử nghiệm các đoạn mã Java một cách nhanh chóng và dễ dàng. Nó hoạt động giống như một REPL (Read-Eval-Print Loop), nơi bạn có thể nhập các biểu thức, các lệnh, và nhận kết quả ngay lập tức.
  • Mục đích:

    • Giúp lập trình viên thử nghiệm và kiểm tra mã nhanh chóng mà không cần tạo các tệp nguồn riêng lẻ.

    • Hỗ trợ việc học tập và dạy học ngôn ngữ Java.

    • Tăng năng suất bằng cách giảm thiểu thời gian khởi động và biên dịch mã.

2. Cách khởi động và sử dụng JShell

2.1 Cách khởi động JShell

  • Khởi động JShell từ dòng lệnh:

    • Mở terminal (hoặc command prompt) và nhập lệnh sau:

        jshell
      
    • Bạn sẽ thấy dấu nhắc JShell (jshell>) xuất hiện, cho phép bạn bắt đầu nhập các lệnh Java.

2.2 Các lệnh và tính năng cơ bản

  • Nhập và thực thi biểu thức:

    • Bạn có thể nhập và thực thi các biểu thức Java trực tiếp trong JShell.

    • Ví dụ:

        jshell> int x = 10;
        x ==> 10
      
        jshell> x + 5
        $2 ==> 15
      
  • Khai báo và sử dụng biến:

    • Bạn có thể khai báo biến và sử dụng chúng như trong một tệp Java thông thường.

    • Ví dụ:

        jshell> String name = "Alice";
        name ==> "Alice"
      
        jshell> System.out.println("Hello, " + name);
        Hello, Alice
      
  • Khai báo và sử dụng phương thức:

    • Bạn có thể khai báo các phương thức và sử dụng chúng.

    • Ví dụ:

        jshell> int add(int a, int b) {
           ...> return a + b;
           ...> }
        |  Created method add(int,int)
      
        jshell> add(5, 3)
        $4 ==> 8
      
  • Khai báo và sử dụng lớp:

    • Bạn có thể khai báo các lớp và tạo các đối tượng từ chúng.

    • Ví dụ:

        jshell> class Person {
           ...> String name;
           ...> int age;
           ...> Person(String name, int age) {
           ...> this.name = name;
           ...> this.age = age;
           ...> }
           ...> }
        |  Created class Person
      
        jshell> Person alice = new Person("Alice", 30);
        alice ==> Person[name=Alice, age=30]
      
        jshell> System.out.println(alice.name + " is " + alice.age + " years old.");
        Alice is 30 years old.
      
  • Lưu và tải lại phiên làm việc:

    • Bạn có thể lưu phiên làm việc hiện tại vào tệp và tải lại sau này.

    • Ví dụ:

        jshell> /save mysession.jsh
      
        jshell> /exit
        |  Goodbye
      
        jshell> jshell mysession.jsh
      

3. Các tính năng nâng cao của JShell

3.1 Sử dụng các lệnh tiện ích

  • /list: Liệt kê tất cả các lệnh và khai báo trong phiên làm việc hiện tại.

      jshell> /list
    
  • /edit: Mở trình soạn thảo để chỉnh sửa mã nguồn của một phương thức hoặc lớp.

      jshell> /edit add
    
  • /vars: Liệt kê tất cả các biến trong phiên làm việc hiện tại.

      jshell> /vars
    
  • /methods: Liệt kê tất cả các phương thức trong phiên làm việc hiện tại.

      jshell> /methods
    
  • /types: Liệt kê tất cả các kiểu dữ liệu trong phiên làm việc hiện tại.

      jshell> /types
    
  • /imports: Liệt kê tất cả các import trong phiên làm việc hiện tại.

      jshell> /imports
    

3.2 Tích hợp với IDE

  • IntelliJ IDEA:

    • IntelliJ IDEA hỗ trợ tích hợp JShell, cho phép bạn chạy và thử nghiệm mã trực tiếp trong IDE.

    • Để sử dụng, mở một dự án Java, chọn "Tools" > "JShell Console" từ menu.

  • Eclipse:

    • Eclipse cũng hỗ trợ JShell thông qua một plugin. Bạn có thể cài đặt plugin này từ Eclipse Marketplace.

    • Sau khi cài đặt, bạn có thể mở JShell console từ "Window" > "Show View" > "Other" > "JShell Console".

4. Ví dụ thực tế sử dụng JShell

4.1 Tính toán đơn giản

  • Ví dụ:

      jshell> int a = 5;
      a ==> 5
    
      jshell> int b = 10;
      b ==> 10
    
      jshell> int sum = a + b;
      sum ==> 15
    
      jshell> System.out.println("Sum: " + sum);
      Sum: 15
    

4.2 Thử nghiệm với các phương thức

  • Ví dụ:

      jshell> String reverse(String s) {
         ...> return new StringBuilder(s).reverse().toString();
         ...> }
      |  Created method reverse(String)
    
      jshell> reverse("hello");
      $3 ==> "olleh"
    

4.3 Thử nghiệm với các lớp và đối tượng

  • Ví dụ:

      jshell> class Rectangle {
         ...> int width, height;
         ...> Rectangle(int width, int height) {
         ...> this.width = width;
         ...> this.height = height;
         ...> }
         ...> int area() {
         ...> return width * height;
         ...> }
         ...> }
      |  Created class Rectangle
    
      jshell> Rectangle rect = new Rectangle(5, 10);
      rect ==> Rectangle[width=5, height=10]
    
      jshell> rect.area();
      $4 ==> 50
    

4.4 Thử nghiệm với thư viện bên ngoài

  • Ví dụ:

      jshell> /env --class-path /path/to/library.jar
    
      jshell> import com.example.LibraryClass;
    
      jshell> LibraryClass lib = new LibraryClass();
      lib ==> com.example.LibraryClass@1b6d3586
    
      jshell> lib.someMethod();
    

5. Thực hành với các bài toán thực tế

5.1 Kiểm tra mã lệnh phức tạp

  • Bài toán: Viết và kiểm tra một phương thức tính giai thừa.

  • Giải pháp:

      jshell> long factorial(int n) {
         ...> if (n <= 1) return 1;
         ...> else return n * factorial(n - 1);
         ...> }
      |  Created method factorial(int)
    
      jshell> factorial(5);
      $5 ==> 120
    

5.2 Tích hợp với cơ sở dữ liệu

  • Bài toán: Kết nối và thực hiện các truy vấn SQL.

  • Giải pháp:

      jshell> /env --class-path /path/to/jdbc-driver.jar
    
      jshell> import java.sql.Connection;
      jshell> import java.sql.DriverManager;
      jshell> import java.sql.ResultSet;
      jshell> import java.sql.Statement;
    
      jshell> Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password");
      conn ==> com.mysql.jdbc.JDBC4Connection@3b6eb2ec
    
      jshell> Statement stmt = conn.createStatement();
      stmt ==> com.mysql.jdbc.JDBC4Statement@27f8302d
    
      jshell> ResultSet rs = stmt.executeQuery("SELECT * FROM mytable");
      rs ==> com.mysql.jdbc.JDBC4ResultSet@3cd1a2f1
    
      jshell> while (rs.next()) {
         ...> System.out.println(rs.getString("column_name"));
         ...> }
    

Kết luận

JShell là một công cụ mạnh mẽ và tiện dụng cho lập trình viên Java, cho phép thử nghiệm mã nhanh chóng và

dễ dàng mà không cần phải tạo và biên dịch các tệp nguồn riêng lẻ. Với JShell, bạn có thể kiểm tra các đoạn mã, phương thức, và thậm chí cả các lớp phức tạp trong thời gian ngắn. Hiểu và sử dụng thành thạo JShell sẽ giúp bạn tăng năng suất và hiệu quả trong quá trình phát triển phần mềm.


More from this blog

hoangkim

366 posts