Menggunakan versi parametrik memberi
- Informasi lebih lanjut kepada pengguna fungsi
- Batasi jumlah program yang dapat Anda tulis (pemeriksaan bug gratis)
Sebagai contoh acak, anggaplah kita memiliki metode yang menghitung akar persamaan kuadrat
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
Dan kemudian Anda ingin itu bekerja pada jenis lain seperti hal-hal selain int
. Anda dapat menulis sesuatu seperti
Num solve(Num a, Num b, Num c){
...
}
Masalahnya adalah ini tidak mengatakan apa yang Anda inginkan. Ia mengatakan
Beri saya 3 hal yang angka seperti (tidak harus dengan cara yang sama) dan saya akan memberi Anda semacam nomor
Kita tidak bisa melakukan sesuatu seperti int sol = solve(a, b, c)
jika a
, b
, dan c
adalah int
s karena kita tidak tahu bahwa metode ini akan mengembalikan int
pada akhirnya! Ini mengarah pada beberapa tarian canggung dengan downcasting dan berdoa jika kita ingin menggunakan solusi dalam ekspresi yang lebih besar.
Di dalam fungsi, seseorang mungkin memberi kita pelampung, bigint, dan derajat dan kita harus menambahkan dan melipatgandakannya bersama-sama. Kami ingin secara statis menolak ini karena operasi antara 3 kelas ini akan menjadi omong kosong. Derajatnya mod 360 sehingga tidak akan terjadi a.plus(b) = b.plus(a)
dan keriuhan serupa akan muncul.
Jika kita menggunakan parametrik polimorfisme dengan subtyping, kita dapat mengesampingkan semua ini karena tipe kita sebenarnya mengatakan apa yang kita maksud
<T : Num> T solve(T a, T b, T c)
Atau dengan kata-kata "Jika Anda memberi saya beberapa jenis yang merupakan angka, saya dapat menyelesaikan persamaan dengan koefisien-koefisien itu".
Ini muncul di banyak tempat lain juga. Sumber lain baik contoh adalah fungsi yang abstrak lebih semacam wadah, ala reverse
, sort
, map
, dll