Return trong C++: Chốt deal kết thúc hàm – Nhận quà liền tay!
C++

Return trong C++: Chốt deal kết thúc hàm – Nhận quà liền tay!

Author

Admin System

@root

Ngày xuất bản

21 Mar, 2026

Lượt xem

1 Lượt

Chào các Gen Z tương lai của ngành lập trình! Anh là Creyt đây, và hôm nay chúng ta sẽ "bóc tách" một từ khóa mà nghe thì đơn giản nhưng lại là xương sống của mọi chương trình: return.

return: Chốt đơn, nhận quà!

Hãy tưởng tượng thế này: Mỗi hàm (function) trong C++ của chúng ta giống như một "challenge" trên TikTok vậy. Bạn thực hiện các bước, quay video, thêm hiệu ứng... Và sau khi hoàn thành tất cả những công đoạn đó, bạn cần phải "Submit" (nộp bài) để mọi người thấy thành quả, đúng không? Từ khóa return chính là cái nút "Submit" thần thánh đó!

Nó có hai nhiệm vụ chính, nhớ kỹ nhé:

  1. Trả về một giá trị: Nếu challenge của bạn là "làm bánh", thì sau khi xong, bạn phải "trả về" cái bánh đó cho người yêu cầu.
  2. Kết thúc hàm ngay lập tức: Dù bạn đang ở giữa chừng một đống code, chỉ cần return một cái là "game over" cho hàm đó, nó sẽ dừng lại và chuyển quyền điều khiển về nơi đã gọi nó.

Code Ví Dụ Minh Họa: "Show me the code!"

1. Hàm void: Chỉ "Submit", không "Trả quà"

Khi hàm của bạn không cần trả về giá trị nào (ví dụ: chỉ in ra màn hình, hay thay đổi trạng thái gì đó), bạn dùng void. Lúc này return chỉ có tác dụng kết thúc hàm.

#include <iostream>

// Hàm này chỉ chào hỏi, không cần trả về gì cả
void greetGenz() {
    std::cout << "Yo, Gen Z! Chào mừng đến với thế giới code!" << std::endl;
    return; // Dù không bắt buộc (nếu là dòng cuối), nhưng dùng để minh họa việc kết thúc hàm
    std::cout << "Dòng này sẽ không bao giờ được chạy đâu, vì hàm đã return rồi!" << std::endl;
}

int main() {
    greetGenz(); // Gọi hàm chào hỏi
    return 0; // Hàm main cũng return đấy, để báo cho hệ điều hành biết chương trình chạy ngon lành
}

2. Hàm có giá trị trả về: "Làm xong, có sản phẩm!"

Đây là trường hợp phổ biến nhất. Hàm thực hiện một phép tính, một logic nào đó và "trả lại" kết quả.

#include <iostream>
#include <string>

// Hàm tính tổng hai số, và trả về kết quả là một số nguyên (int)
int addTwoNumbers(int num1, int num2) {
    int sum = num1 + num2;
    return sum; // Trả về giá trị của biến sum
}

// Hàm kiểm tra tuổi, trả về một chuỗi thông báo
std::string checkAgeForAccess(int age) {
    if (age < 18) {
        return "Xin lỗi, bạn chưa đủ tuổi để truy cập. Quay lại sau nhé!"; // Trả về chuỗi và thoát hàm ngay
    }
    return "Chào mừng! Bạn đã đủ tuổi để khám phá."; // Chỉ chạy nếu tuổi >= 18
}

int main() {
    int result = addTwoNumbers(5, 7); // Biến result sẽ nhận giá trị 12
    std::cout << "Tổng của 5 và 7 là: " << result << std::endl; // Output: 12

    std::cout << checkAgeForAccess(16) << std::endl; // Output: Xin lỗi, bạn chưa đủ tuổi...
    std::cout << checkAgeForAccess(20) << std::endl; // Output: Chào mừng! Bạn đã đủ tuổi...

    return 0;
}
Illustration

Mẹo từ Creyt (Best Practices): Ghi nhớ và dùng thực tế

  1. "Chốt đơn" mọi ngóc ngách: Nếu hàm của bạn được khai báo là sẽ trả về một giá trị (không phải void), thì phải đảm bảo rằng mọi con đường có thể đi trong hàm đều dẫn đến một câu lệnh return. Không là compiler (cái ông khó tính) sẽ la làng đấy!
  2. "Return sớm = Thoát sớm": Trong nhiều trường hợp, đặc biệt là khi xử lý lỗi hoặc các điều kiện đặc biệt, việc return sớm giúp code của bạn gọn gàng hơn, dễ đọc hơn. Thay vì phải lồng nhiều if-else, bạn có thể kiểm tra điều kiện lỗi và return ngay. Giống như "kiểm tra vé" ở cửa rạp, ai không có vé thì return về nhà luôn, không cần phải đi vào trong rồi mới đuổi ra.
  3. "Kiểu dữ liệu phải chuẩn chỉ": Cái bánh bạn làm (giá trị trả về) phải đúng loại mà người ta yêu cầu (kiểu dữ liệu khai báo của hàm). Hàm int thì phải return số nguyên, hàm std::string thì phải return chuỗi, không được lộn xộn.

Góc học thuật Harvard (nhưng vẫn dễ hiểu): Hợp đồng hàm số

Từ góc độ học thuật mà nói, return là một phần cốt lõi của ngữ nghĩa hàm số (function semantics)quản lý luồng điều khiển (control flow management). Khi bạn định nghĩa một hàm với kiểu trả về không phải void, bạn đang thiết lập một "hợp đồng" với bất kỳ đoạn code nào gọi hàm đó. Hợp đồng nói rằng: "Tôi sẽ thực hiện một tác vụ, và khi hoàn thành (hoặc gặp một điều kiện dừng), tôi sẽ cung cấp cho bạn một giá trị thuộc kiểu dữ liệu X."

return không chỉ đơn thuần là gửi một giá trị; nó là cơ chế chính để chuyển giao quyền điều khiển từ hàm con (callee) trở lại hàm gọi (caller), đồng thời mang theo "kết quả" của quá trình xử lý. Điều này là nền tảng cho việc xây dựng các chương trình module hóa và có khả năng tái sử dụng cao.

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

  • Game Development: Khi bạn bắn một viên đạn, hàm calculateDamage(bulletType, distance) sẽ return một số nguyên là lượng sát thương gây ra. Hàm checkCollision(playerPos, enemyPos) sẽ return true nếu va chạm, false nếu không.
  • Website/API Backend: Khi bạn đăng nhập vào Facebook, Instagram, hàm authenticateUser(username, password) sẽ return một token (chuỗi) nếu đăng nhập thành công, hoặc return null/false kèm theo mã lỗi nếu sai mật khẩu.
  • Ứng dụng di động: Khi bạn dùng Google Maps tìm đường, hàm calculateRoute(start, end) sẽ return một đối tượng chứa danh sách các điểm, thời gian ước tính, v.v.
  • Hệ điều hành: Ngay cả hàm main() của chúng ta cũng return 0 để báo cho hệ điều hành biết rằng chương trình đã chạy thành công. Nếu có lỗi, nó có thể return một số khác 0.

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

Hồi anh mới tập tành code, anh cũng hay quên mất vụ return này lắm, đặc biệt là với các hàm int hay string. Compiler báo lỗi đỏ lòm mới nhận ra. Dần dần, anh hiểu rằng return không chỉ là một cú pháp, mà nó là lời cam kết của hàm với phần còn lại của chương trình.

Nên dùng return khi nào?

  • Khi hàm của bạn cần tạo ra một kết quả cụ thể để một phần khác của chương trình sử dụng. Đây là trường hợp phổ biến nhất.
  • Khi bạn muốn dừng hàm ngay lập tức vì một điều kiện nào đó (ví dụ: dữ liệu đầu vào không hợp lệ, lỗi, hoặc đã đạt được mục tiêu cần thiết và không cần xử lý thêm). Đây là kỹ thuật "guard clause" rất hiệu quả.
  • Trong hàm main(): Luôn return 0 khi chương trình chạy thành công, và một giá trị khác 0 (ví dụ 1) khi có lỗi. Điều này giúp các script tự động hoặc các chương trình khác biết được trạng thái của ứng dụng của bạn.

return không chỉ là một từ khóa, nó là một công cụ mạnh mẽ để kiểm soát luồng chương trình và tạo ra các hàm có ý nghĩa. Hãy dùng nó một cách thông minh, và code của bạn sẽ trở nên mạch lạc, dễ hiểu hơn rất nhiều!

Thuộc Series: C++

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!