Return: Chìa Khóa Trao Đổi Giá Trị Của Object Trong Java (Creyt's Notes)
Java – OOP

Return: Chìa Khóa Trao Đổi Giá Trị Của Object Trong Java (Creyt's Notes)

Author

Admin System

@root

Ngày xuất bản

20 Mar, 2026

Lượt xem

5 Lượt

return keyword

Chào các 'developer-to-be' của anh Creyt! Hôm nay, chúng ta sẽ 'mổ xẻ' một từ khóa nhỏ nhưng có võ, mà nếu thiếu nó, code của các em sẽ như một cuộc gọi nhỡ không có tin nhắn thoại: từ khóa return trong Java, đặc biệt là trong thế giới OOP đầy mê hoặc.

return là gì mà "hot" vậy?

Tưởng tượng thế này nhé: Các em sai thằng em út đi mua giùm gói mì tôm. Thằng bé đi, mua xong, rồi nó mang gói mì tôm về cho các em. Cái hành động 'mang gói mì tôm về' đó, chính là return đấy.

Trong lập trình Java, đặc biệt là khi các em làm việc với các method (hành động của một object), từ khóa return có hai nhiệm vụ chính, mà anh gọi là "combo quyền năng":

  1. Trao lại giá trị (The Giver): Nó dùng để "trả về" một giá trị từ method đó cho nơi đã gọi method ấy. Giống như thằng em út trả mì tôm về cho các em vậy. Cái giá trị này có thể là số, chữ, một đối tượng khác, hay thậm chí là một null (nếu chẳng may hết mì tôm).
  2. Kết thúc nhiệm vụ (The Finisher): Ngay khi return được thực thi, method đó sẽ dừng mọi hoạt động còn lại và kết thúc. Kể cả có 100 dòng code phía dưới return, chúng cũng sẽ bị "ngó lơ". Đây là lý do tại sao các em không thể có nhiều hơn một câu lệnh return trả về giá trị trong một đường đi (path) của code, trừ khi chúng nằm trong các nhánh điều kiện khác nhau.

Tóm lại: return là cách một method "báo cáo kết quả" và "kết thúc phiên làm việc" của mình. Nó là yếu tố sống còn để các method có thể giao tiếp, trao đổi dữ liệu với nhau, xây dựng nên một hệ thống phần mềm mạch lạc, không phải kiểu "tôi làm xong rồi, nhưng không biết kết quả ở đâu".

Code Ví Dụ Minh Họa: "Thằng Em Ưng Ý"

Hãy xem xét một ví dụ OOP kinh điển: một Calculator object (đối tượng máy tính) với các method tính toán.

public class Calculator {

    // Method này "trả về" tổng của hai số nguyên
    public int add(int num1, int num2) {
        int sum = num1 + num2;
        // Đây là lúc thằng em "trả lại" kết quả cho mình
        return sum; 
        // Sau dòng này, không có gì được chạy nữa trong method này
    }

    // Method này cũng "trả về" hiệu của hai số nguyên
    public int subtract(int num1, int num2) {
        // Có thể return trực tiếp biểu thức
        return num1 - num2;
    }

    // Method này "không trả về" giá trị nào cả (void)
    // Nó chỉ thực hiện một hành động (in ra màn hình)
    public void displayWelcomeMessage() {
        System.out.println("Chào mừng đến với Calculator của Creyt!");
        // Không có return ở đây, hoặc có thể dùng return; để kết thúc sớm
    }

    public static void main(String[] args) {
        Calculator myCalc = new Calculator(); // Tạo một đối tượng Calculator

        // Gọi method add() và nhận giá trị trả về
        int resultAdd = myCalc.add(10, 5); 
        System.out.println("Tổng là: " + resultAdd); // Output: Tổng là: 15

        // Gọi method subtract() và nhận giá trị trả về
        int resultSubtract = myCalc.subtract(20, 7);
        System.out.println("Hiệu là: " + resultSubtract); // Output: Hiệu là: 13

        // Gọi method void, không cần gán vào biến vì nó không trả về gì
        myCalc.displayWelcomeMessage(); // Output: Chào mừng đến với Calculator của Creyt!
    }
}

Trong ví dụ trên, add()subtract() đều có kiểu trả về (int), nên chúng bắt buộc phải dùng return để trả về một giá trị int. Còn displayWelcomeMessage() có kiểu trả về là void (nghĩa là "không có gì"), nên nó không cần return giá trị nào cả.

Illustration

Mẹo từ anh Creyt: "Bí kíp võ công" với return

  1. Kiểu trả về là "Lời Hứa": Khi em khai báo public String getName(), em đang hứa với compiler và với các dev khác rằng method này chắc chắn sẽ trả về một String. Nếu em return một int hoặc không return gì cả (trừ khi ném exception), compiler sẽ "đấm" em ngay.

  2. return sớm để "thoát hiểm" (Guard Clauses): Đây là một pattern cực kỳ hữu ích. Thay vì lồng ghép nhiều if-else phức tạp, hãy kiểm tra các điều kiện "không hợp lệ" ngay từ đầu và return sớm.

    public String getUserStatus(int userId) {
        if (userId <= 0) {
            // Nếu userId không hợp lệ, thoát sớm và trả về thông báo lỗi
            return "ID người dùng không hợp lệ!"; 
        }
        // ... Các logic phức tạp hơn chỉ chạy khi userId hợp lệ
        // Ví dụ: truy vấn database, xử lý dữ liệu
        if (userId == 123) {
            return "Admin";
        } else {
            return "User thường";
        }
    }
    
  3. Không lạm dụng return trong void methods: Dù các em có thể dùng return; (không có giá trị) trong void method để kết thúc sớm, nhưng hãy cân nhắc kỹ. Đôi khi, cấu trúc if-else hoặc break/continue trong vòng lặp sẽ rõ ràng hơn. Chỉ dùng return; khi muốn thoát hoàn toàn khỏi method đó một cách có chủ đích.

Ứng dụng thực tế: return ở khắp mọi nơi!

Các em có biết return xuất hiện trong hầu hết các ứng dụng/website mà các em dùng hàng ngày không?

  • Shopee/Tiki/Lazada: Khi các em thêm sản phẩm vào giỏ hàng, method calculateTotalPrice() sẽ return tổng số tiền cần thanh toán. getProductDetails(productId) sẽ return một Product object chứa thông tin sản phẩm.
  • Facebook/Instagram: Khi các em login(username, password), method này có thể return một UserSession object nếu đăng nhập thành công, hoặc return null nếu sai thông tin. getPostsByUserId(userId) sẽ return một danh sách các bài viết.
  • Game online (Liên Quân, Genshin Impact): calculateDamage(attacker, defender) sẽ return lượng sát thương thực tế gây ra. getInventoryItems(player) sẽ return danh sách đồ trong kho của người chơi.

Tất cả những "kết quả" mà các em thấy trên màn hình, hay những dữ liệu được xử lý ngầm, đều là nhờ các method đã return giá trị của chúng đấy.

Thử nghiệm của Creyt và lời khuyên chân thành

Anh từng thấy nhiều bạn newbie bối rối khi không biết khi nào thì cần return, khi nào thì void. Đơn giản thôi:

  • Dùng return khi method của em tạo ra hoặc tìm ra một thứ gì đó mà các phần khác của chương trình cần dùng đến. Ví dụ: tính toán, lấy dữ liệu từ database, tạo một đối tượng mới.
  • Dùng void khi method của em chỉ thực hiện một hành động mà không cần trả lại kết quả cụ thể nào để dùng tiếp. Ví dụ: in ra màn hình, lưu dữ liệu vào database (hành động lưu là chính, không cần trả về "đã lưu thành công" mà có thể dùng exception để báo lỗi), thay đổi trạng thái của một đối tượng.

Hãy nghĩ về return như một cây cầu nối giữa các method, cho phép chúng trao đổi thông tin và kết hợp lại để tạo ra một chương trình mạnh mẽ. Nắm vững return là một bước tiến lớn trong hành trình trở thành một 'dev xịn' đó các em!

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!