Hàm giống như một máy móc: nhận đầu vào, xử lý, cho ra kết quả. Giống như người vận hành máy, lập trình viên gọi hàm để nó bắt đầu thực thi.
Hàm có tên khác nhau ở các ngôn ngữ nhưng chia sẻ hai đặc điểm:
- Chứa chuỗi hướng dẫn cần xử lý
- Các hướng dẫn được xác định bằng một tên – tên hàm
Tại sao dùng hàm?
- Tái sử dụng (Reusability) – cùng chức năng ở nhiều nơi: viết một lần, gọi nhiều lần.
- Tính mô-đun (Modularity) – mã gọn gàng, dễ đọc, thay vì viết tất cả trong main().
- Dễ sửa đổi – thay đổi ở một nơi thay vì nhiều chỗ, giảm thừa dữ liệu.
- Cung cấp trừu tượng (Abstraction) – từ tên hàm biết nó làm gì mà không cần biết cách làm. VD: pow() trong math.h tính lũy thừa mà không cần biết thuật toán bên trong.
Khai báo và định nghĩa hàm
Khai báo hàm: báo cho trình biên dịch kiểu trả về và tên hàm.
Cú pháp
Không có thân hàm
Kiểu_trả_về tên_hàm(danh_sách_tham_số tùy chọn);
Có thân hàm
Kiểu_trả_về tên_hàm(danh_sách_tham_số tùy chọn) { // thân hàm }
Giải thích
- return_type – cho biết hàm có trả về gì không và kiểu dữ liệu gì.
void dummy(){ // không trả về, không có return }
int dummy(){ // trả về int, bắt buộc có return integer_value; }
float dummy(){ // trả về float, bắt buộc có return float_value; }
- function name – tên do lập trình viên đặt.
- parameters list (optional) – tham số nhận giá trị từ caller.
Định nghĩa hàm chứa chức năng hàm thực hiện khi được gọi.
Ví dụ
#includeusing namespace std; // hàm tìm giá trị lớn nhất trong hai tham số int greatest(int val_1, int val_2) { if(val_1 > val_2){ return val_1; } else{ return val_2; } } int main(){ int val_1=10, val_2=20; int highest = greatest(val_1, val_2); cout << "The greatest value is : " << highest; return 0; }
Kết quả
The greatest value is : 20
Tham số hàm
- Tham số tùy chọn, nếu không có tham số hàm vẫn chạy.
- Biến khai báo trong định nghĩa hàm để nhận giá trị từ caller gọi là Parameters. VD: int greatest(int val_1, int val_2)
- Biến truyền từ caller gọi là Arguments. VD: greatest(val_1, val_2)
- Actual Parameters (tham số thực) – dữ liệu truyền cho hàm (10, 20). Formal Parameters (tham số hình thức) – dữ liệu hàm nhận (val_1, val_2).
Điểm quan trọng về hàm main()
- Mọi chương trình có điểm vào (entry point), C/C++ dùng main().
- Nếu main() trả về void -> không trả giá trị cho trình biên dịch; nếu int -> trả giá trị (return 0 báo kết thúc).
- Trong C – main() trả về void hoặc int.
- Trong C++ – main() chỉ trả về int.