Nếu bạn đổi tên một phương thức, nó sẽ không còn bị quá tải nữa. Nói chung, quá tải không nhất thiết làm cho mã ít đọc hơn, tuy nhiên nó có thể làm cho việc thực hiện khó thực hiện hơn nếu cú pháp không rõ ràng.
Nhiều ngôn ngữ sử dụng nạp chồng phương thức làm phương tiện để hiển thị giao diện cho chức năng trong đó các tham số có thể là tùy chọn và mặc định cho các tham số tùy chọn được ngụ ý. Điều này đặc biệt đúng đối với các ngôn ngữ không hỗ trợ cú pháp tham số mặc định trong khai báo phương thức.
Vì vậy, làm điều này:
void MyMethod(int param1, int param2 = 10)
{
...
}
cứu bạn khỏi việc này:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
Như dễ đọc hơn, điều đó thực sự đến với bạn. Cá nhân tôi thích tùy chọn thứ hai, đặc biệt khi danh sách tham số hơi dài, nhưng tôi cho rằng nó không thực sự quan trọng miễn là bạn nhất quán trong suốt API của mình.
Khó khăn với quá tải xuất hiện khi bạn muốn các hàm về cơ bản giống nhau và bạn muốn các danh sách tham số giống nhau, nhưng các kiểu trả về sẽ khác nhau. Hầu hết các ngôn ngữ không biết cách phân biệt giữa hai phương thức được đặt tên giống nhau, nhưng với các kiểu trả về khác nhau. Tại thời điểm này, bạn cần suy nghĩ về việc sử dụng generic, thay đổi giao diện tham số hoặc đổi tên một trong các phương thức của bạn để chỉ ra sự khác biệt trong loại trả về. Đây là nơi dễ đọc có thể trở thành một vấn đề lớn, nếu bạn không giải quyết một kế hoạch đặt tên đơn giản và rõ ràng để giải quyết các tình huống như thế này.
Đặt tên cho các phương thức quá tải của bạn GetSomething()
và GetSomethingEx()
sẽ không nói nhiều về sự khác biệt giữa các phương thức của bạn, đặc biệt nếu đó là các kiểu trả về là sự khác biệt duy nhất giữa chúng. Mặt khác, GetSomethingAsInt()
vàGetSomethingAsString()
cho bạn biết thêm một chút về những gì các phương thức đang làm, và trong khi không hoàn toàn quá tải, hãy chỉ ra rằng hai phương thức này làm những việc tương tự nhau, nhưng trả về các loại giá trị khác nhau. Tôi biết rằng có nhiều cách khác bạn có thể đặt tên cho các phương thức, tuy nhiên với mục đích minh họa điểm, những ví dụ thô thiển này nên làm.
Trong ví dụ về OP, việc đổi tên không thực sự cần thiết vì các tham số của phương thức là khác nhau, tuy nhiên, điều này làm cho mọi thứ rõ ràng hơn một chút để đặt tên cho một phương thức cụ thể hơn. Cuối cùng, nó thực sự thuộc về loại giao diện bạn muốn trình bày cho người dùng của mình. Một quyết định về việc không quá tải không nên được đưa ra chỉ dựa trên nhận thức của bạn về khả năng đọc. Ví dụ, các phương thức quá tải có thể đơn giản hóa giao diện API và giảm số lượng phương thức mà nhà phát triển có thể cần nhớ, mặt khác, nó có thể làm mờ giao diện đến một mức độ sau đó yêu cầu nhà phát triển đọc tài liệu phương thức để hiểu mẫu nào về phương thức sử dụng, trong khi có một số phương thức được đặt tên mô tả tương tự có thể làm cho nó rõ ràng hơn chỉ cần đọc một tên phương thức theo mục đích của nó.