Nạp chồng hàm (tiếng Anh: function overloading hay method overloading) là một tính năng được hỗ trợ trong nhiều ngôn ngữ lập trình như Ada, C#, VB.NET, C++, D và Java. Tính năng này cho phép chúng ta định nghĩa nhiều hàm hay thủ tục với cùng một tên nhưng có khác nhau về các tham số đầu vào hay đầu ra.
Ví dụ: doTask() và doTask(int n) là các hàm nạp chồng. Nếu ta gọi tên hàm này mà không có tham số vào thì hàm thứ nhất sẽ được gọi. Để gọi hàm thứ hai, chúng ta phải truyền một tham số vào là một giá trị nguyên như doTask(8).
Lưu ý
Khi sử dụng hàm nạp chồng là chúng ta phải đặc biệt cẩn thận khi đặt giá trị mặc định của tham số đầu vào. Trong ví dụ trên, nếu hàm thứ hai được định nghĩa là doTask(int n = 0) thì khi chúng ta thực hiện lời gọi hàm doTask(), trình biên dịch sẽ không thể phán đoán được chúng ta muốn gọi hàm thứ nhất hay hàm thứ hai.
Chúng ta cũng không nên lạm dụng việc sử dụng tính năng nạp chồng hàm vì một hàm được nạp chồng quá nhiều lần sẽ gây ra khó khăn cho lập trình viên trong việc đọc và hiểu mã nguồn. Việc này sẽ được khắc phục một phần nào nếu lập trình viên sử dụng một môi trường phát triển phần mềm để trợ giúp cho việc tìm kiếm phiên bản đúng của hàm đang được sử dụng.
Tham khảo