Void Keyword: Bí Kíp Xử Lý Hành Động Mà Không Cần Trả Về
Java – OOP

Void Keyword: Bí Kíp Xử Lý Hành Động Mà Không Cần Trả Về

Author

Admin System

@root

Ngày xuất bản

20 Mar, 2026

Lượt xem

2 Lượt

void keyword

Chào các "thợ code" tương lai, hôm nay anh Creyt sẽ "bung lụa" một từ khóa mà nhìn thì "chill phết" nhưng lại cực kỳ quan trọng trong thế giới Java: void. Nghe cái tên đã thấy "hư không" rồi đúng không? Chính xác! Nó chính là "người vận chuyển" mà chỉ giao hàng, chứ không thèm "report" lại đã giao cái gì đâu!

1. void là gì và để làm gì? (Giải thích theo GenZ)

Trong lập trình, đặc biệt là Java, khi các em viết một "hàm" (hay "method" trong OOP), đôi khi các em muốn cái hàm đó làm một "công việc" cụ thể nào đó, nhưng không cần nó phải "trả về" một kết quả nào hết. Ví dụ, em bảo con bot của em "đi tới", nó đi tới là xong. Em đâu cần nó "trả về" một con số hay một đoạn chữ nào để báo là nó đã đi tới đâu, đúng không?

void chính là "tín hiệu" cho Java biết rằng: "Ê, cái method này chỉ làm thôi, không có "output" gì để mày dùng tiếp đâu nhá!". Nó giống như em sai đứa em đi đổ rác vậy. Nó đi đổ rác xong là xong, em đâu cần nó mang về một cái biên lai hay tờ giấy xác nhận đã đổ rác thành công đâu. Việc đổ rác là hành động, và kết quả của hành động đó là rác đã được đổ, chứ không phải một giá trị nào đó để em "lưu" lại.

Nói cách khác, void được dùng để khai báo các method thực hiện hành động (side effects) như in ra màn hình, thay đổi trạng thái của một đối tượng, ghi dữ liệu vào file, mà không cần phải tính toántrả về một giá trị cụ thể nào cho nơi gọi nó.

2. Code Ví Dụ Minh Hoạ Rõ Ràng

Để các em dễ hình dung, anh Creyt sẽ tạo một class Robot "xịn xò" nhé:

class Robot {
    String name;
    boolean isMoving;

    public Robot(String name) {
        this.name = name;
        this.isMoving = false;
        System.out.println(this.name + " đã được khởi tạo. Sẵn sàng phục vụ!");
    }

    // Method 'void': Chỉ thực hiện hành động, không trả về giá trị
    public void moveForward() {
        if (!isMoving) {
            System.out.println(this.name + " bắt đầu di chuyển về phía trước.");
            this.isMoving = true; // Thay đổi trạng thái nội bộ của robot
        } else {
            System.out.println(this.name + " đang di chuyển rồi, không cần ra lệnh nữa.");
        }
    }

    // Method 'void': Chỉ thực hiện hành động, không trả về giá trị
    public void stop() {
        if (isMoving) {
            System.out.println(this.name + " dừng lại.");
            this.isMoving = false; // Thay đổi trạng thái nội bộ
        } else {
            System.out.println(this.name + " đang đứng yên mà.");
        }
    }

    // Method 'void': Chỉ thực hiện hành động, không trả về giá trị (in ra màn hình)
    public void reportStatus() {
        String status = isMoving ? "đang di chuyển" : "đang đứng yên";
        System.out.println("Trạng thái của " + this.name + ": " + status + ".");
    }

    // Method có trả về giá trị (để so sánh)
    public String getName() {
        return this.name;
    }
}

public class RobotCommander {
    public static void main(String[] args) {
        Robot wallE = new Robot("Wall-E");

        wallE.moveForward(); // Gọi method void
        wallE.reportStatus(); // Gọi method void

        wallE.stop(); // Gọi method void
        wallE.reportStatus(); // Gọi method void

        String robotName = wallE.getName(); // Gọi method có trả về giá trị
        System.out.println("Tên của robot là: " + robotName);

        // Thử gọi method void và gán kết quả (sẽ báo lỗi compile)
        // String result = wallE.moveForward(); // Lỗi: 'void' type cannot be converted to 'String'
    }
}

Trong ví dụ trên, moveForward(), stop(), và reportStatus() đều là các method void. Chúng thực hiện hành động (di chuyển, dừng, in trạng thái) nhưng không trả về bất kỳ String, int hay boolean nào. Còn getName() thì trả về một String là tên của robot.

Illustration

3. Mẹo (Best Practices) để ghi nhớ hoặc dùng thực tế

  • "Làm việc tốt, không cần khoe": Hãy nghĩ về void như một người làm việc âm thầm, hiệu quả. Họ làm xong việc là xong, không cần "báo cáo kết quả" bằng một giá trị nào đó để người khác tiếp tục xử lý.
  • Đừng cố "vắt sữa" từ void: Nếu một method là void, đừng bao giờ cố gắng gán kết quả của nó vào một biến nào đó. Java sẽ "vả" ngay bằng lỗi compile vì nó biết "thằng này có trả về gì đâu mà mày đòi gán?".
  • Tên method void thường là động từ: printSomething(), saveData(), updateProfile(), sendEmail(). Tên gọi rõ ràng giúp ta hiểu ngay method này sẽ "làm gì".
  • return; trong void: Các em có thể dùng return; trong một method void để thoát khỏi method đó sớm, thường là khi có điều kiện nào đó không thỏa mãn. Ví dụ: if (user == null) { System.out.println("User không tồn tại."); return; }.

4. Ví dụ thực tế các ứng dụng/website đã ứng dụng

Hầu hết các ứng dụng và website đều "nhúng" void ở khắp mọi nơi, mà các em không hề hay biết:

  • Ứng dụng di động (ví dụ: Instagram): Khi em nhấn nút "Like" một bài viết. Có một method likePost(postId) được gọi. Method này có thể là void vì nó chỉ cần gửi yêu cầu đến server để cập nhật số lượt like, sau đó giao diện người dùng sẽ tự động cập nhật số like. Nó không cần trả về "số like mới" trực tiếp cho cái nút "Like" đó.
  • Website (ví dụ: Shopee/Lazada): Khi em nhấn "Thêm vào giỏ hàng". Phương thức addToCart(productId, quantity) có thể là void. Nó chỉ cần thực hiện hành động thêm sản phẩm vào giỏ hàng trong database hoặc session. Sau đó, một phần khác của trang web sẽ tự động hiển thị số lượng sản phẩm trong giỏ hàng được cập nhật.
  • Game (ví dụ: Liên Quân Mobile): Khi tướng của em dùng chiêu thức. Phương thức useSkill(skillId) có thể là void. Nó thực hiện animation, gây sát thương, hoặc áp dụng hiệu ứng. Kết quả là trạng thái của game thay đổi, nhưng bản thân phương thức đó không cần trả về một giá trị nào cụ thể để nơi gọi nó dùng tiếp.
  • Hệ thống Log: System.out.println("Hello world!") mà các em hay dùng chính là một method void của class PrintStream bên trong System.out. Nó chỉ in ra màn hình, không trả về gì cả.

5. Thử nghiệm đã từng và hướng dẫn nên dùng cho case nào

Anh Creyt đã "chinh chiến" nhiều năm, và anh nhận ra rằng void là "người bạn" không thể thiếu khi em muốn một method:

  • Thực hiện một hành động và thay đổi trạng thái của đối tượng (hoặc hệ thống): Như ví dụ Robot ở trên, moveForward() thay đổi isMoving. Hoặc một method setTemperature(int temp) trong class AirConditioner chỉ đơn thuần thay đổi nhiệt độ hiện tại của máy lạnh.
  • Tương tác với bên ngoài mà không cần kết quả trực tiếp: Ví dụ, ghi dữ liệu vào file saveToFile(data). Nó chỉ cần hoàn thành việc ghi, không cần trả về boolean hay String gì cả (trừ khi có lỗi).
  • Xử lý sự kiện (Event Handlers): Trong lập trình giao diện người dùng (UI), các method xử lý sự kiện (như onClick(), onHover()) thường là void. Chúng chỉ cần phản ứng với sự kiện (ví dụ: đổi màu nút, mở popup), không cần trả về giá trị cho hệ thống sự kiện.

Khi nào KHÔNG nên dùng void?

Khi method của em được tạo ra với mục đích chính là tính toáncung cấp một giá trị cho nơi gọi nó. Ví dụ:

  • calculateTotal(price, quantity): Phải trả về double là tổng tiền.
  • isValidEmail(email): Phải trả về boolean để kiểm tra email có hợp lệ không.
  • getUserById(id): Phải trả về một đối tượng User.

Nhớ kỹ điều này nhé các "chiến thần"! void không phải là vô dụng, nó là "vô giá trị trả về" để tập trung vào hành động. "Less is more" trong trường hợp này đấy! Keep coding và đừng ngại "bung lụa" với void nhé!

Thuộc Series: Java – OOP

Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!