Parametrik sürümün kullanılması
- Fonksiyonun kullanıcılarına daha fazla bilgi
- Yazabileceğiniz program sayısını kısıtlar (ücretsiz hata kontrolü)
Rastgele bir örnek olarak, kuadratik denklemin köklerini hesaplayan bir yöntemimiz olduğunu varsayalım
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
Ve sonra bunun gibi şeyler gibi başka sayılarda da çalışmasını istiyorsunuz int
. Gibi bir şey yazabilirsiniz
Num solve(Num a, Num b, Num c){
...
}
Sorun, bunun ne istediğini söylememesi. Diyor ki
Bana sayı gibi 3 şey verin (mutlaka aynı şekilde değil) ve size bir tür sayı vereceğim
Biz böyle bir şey yapamaz int sol = solve(a, b, c)
eğer a
, b
ve c
vardır int
biz yöntemi bir geri gidiyor bilmiyorum çünkü s int
sonunda! Bu, çözümü daha büyük bir ifadede kullanmak istiyorsak, iniş ve dua ile garip bir dansa yol açar.
Fonksiyonun içinde, birisi bize bir şamandıra, bir bigint ve derece verebilir ve bunları birlikte eklememiz ve çoğalmamız gerekir. Bunu statik olarak reddetmek istiyoruz, çünkü bu 3 sınıf arasındaki operasyonlar anlamsız olacak. Dereceler mod a.plus(b) = b.plus(a)
360'tır, bu yüzden benzer komiklikler ortaya çıkacaktır.
Parametrik polimorfizmi alt tiplemeyle kullanırsak, tüm bunları göz ardı edebiliriz çünkü tipimiz aslında ne demek istediğimizi söyler
<T : Num> T solve(T a, T b, T c)
Veya "Bana bir sayı olan bir tür verirseniz, bu katsayılarla denklemleri çözebilirim" sözcükleriyle.
Bu başka yerlerde de ortaya çıkıyor. Örnekler iyi bir kaynaktır fonksiyonları olan soyut konteyner, ala çeşit bitti reverse
, sort
, map
vb