Jika Anda mengganti nama metode, itu tidak lagi akan kelebihan beban. Dalam dan dari dirinya sendiri, overloading tidak selalu membuat kode lebih mudah dibaca, namun dapat membuat implementasi lebih sulit untuk diikuti jika sintaksisnya tidak jelas.
Banyak bahasa menggunakan metode kelebihan muatan sebagai sarana untuk menampilkan antarmuka ke fungsionalitas di mana parameter mungkin opsional dan standar untuk parameter opsional tersirat. Ini terutama berlaku untuk bahasa yang tidak mendukung sintaks parameter default dalam deklarasi metode.
Jadi melakukan ini:
void MyMethod(int param1, int param2 = 10)
{
...
}
menyelamatkan Anda dari melakukan ini:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
Mengenai yang lebih mudah dibaca, itu benar-benar terjadi pada Anda. Secara pribadi saya lebih suka opsi kedua, terutama ketika daftar parameter menjadi agak panjang, tapi saya kira itu tidak terlalu penting selama Anda konsisten di seluruh API Anda.
Kesulitan dengan overloading datang ketika Anda ingin fungsi yang pada dasarnya melakukan hal yang sama, dan di mana Anda ingin daftar parameternya sama, tetapi tipe pengembaliannya berbeda. Sebagian besar bahasa tidak tahu bagaimana membedakan antara dua metode yang bernama sama, tetapi dengan jenis pengembalian yang berbeda. Pada titik ini, Anda perlu berpikir tentang menggunakan generik, mengubah antarmuka parameter, atau mengganti nama salah satu metode Anda untuk menunjukkan perbedaan dalam tipe pengembalian. Di sinilah keterbacaan bisa menjadi masalah besar, jika Anda tidak puas dengan skema penamaan yang sederhana dan jelas untuk menghadapi situasi seperti ini.
Memberi nama metode kelebihan beban Anda GetSomething()
dan GetSomethingEx()
tidak akan mengatakan banyak tentang perbedaan di antara metode Anda, terutama jika itu adalah tipe pengembalian yang merupakan satu-satunya perbedaan di antara mereka. Di sisi lain, GetSomethingAsInt()
dan GetSomethingAsString()
memberi tahu Anda sedikit lebih banyak tentang apa yang dilakukan metode, dan meskipun tidak sepenuhnya kelebihan, lakukan mengindikasikan bahwa kedua metode melakukan hal yang sama, namun mengembalikan jenis nilai yang berbeda. Saya tahu bahwa ada cara lain Anda bisa menyebutkan metode, namun untuk tujuan menggambarkan hal ini, contoh-contoh kasar ini harus dilakukan.
Dalam contoh OPs, penggantian nama tidak sepenuhnya diperlukan karena parameter metode berbeda, namun itu membuat hal-hal sedikit lebih jelas untuk memberi nama metode lebih khusus. Pada akhirnya, itu benar-benar turun ke jenis antarmuka yang ingin Anda presentasikan kepada pengguna Anda. Keputusan untuk tidak membebani tidak harus dibuat hanya berdasarkan persepsi Anda tentang keterbacaan. Metode overloading misalnya dapat menyederhanakan antarmuka API dan mengurangi jumlah metode yang mungkin perlu diingat oleh pengembang, di sisi lain, itu dapat mengaburkan antarmuka hingga derajat yang kemudian mengharuskan pengembang untuk membaca dokumentasi metode untuk memahami bentuk mana metode untuk digunakan, sedangkan memiliki sejumlah metode yang sama namun deskriptif disebutkan dapat membuatnya lebih jelas hanya membaca nama metode untuk tujuannya.