Sử dụng phiên bản tham số cho
- Thêm thông tin cho người dùng chức năng
- Hạn chế số lượng chương trình bạn có thể viết (kiểm tra lỗi miễn phí)
Như một ví dụ ngẫu nhiên, giả sử chúng ta có một phương pháp tính toán các gốc của phương trình bậc hai
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
Và sau đó bạn muốn nó hoạt động trên các loại số khác như những thứ bên cạnh int
. Bạn có thể viết một cái gì đó như
Num solve(Num a, Num b, Num c){
...
}
Vấn đề là điều này không nói lên những gì bạn muốn. Nó nói rằng
Đưa cho tôi 3 thứ giống như số (không nhất thiết phải theo cùng một cách) và tôi sẽ trả lại cho bạn một số loại
Chúng ta không thể làm một cái gì đó như int sol = solve(a, b, c)
nếu a
, b
và c
là int
vì chúng ta không biết rằng phương pháp int
cuối cùng sẽ trả về ! Điều này dẫn đến một số điệu nhảy lúng túng với việc hạ thấp và cầu nguyện nếu chúng ta muốn sử dụng giải pháp trong một biểu thức lớn hơn.
Bên trong chức năng, ai đó có thể đưa cho chúng ta một hình nổi, một khối lớn và độ và chúng ta phải thêm và nhân chúng lại với nhau. Chúng tôi muốn từ chối một cách tĩnh tại vì các hoạt động giữa 3 lớp này sẽ rất vô nghĩa. Độ là mod 360, do đó sẽ không xảy ra trường hợp a.plus(b) = b.plus(a)
và những điều tương tự sẽ xuất hiện.
Nếu chúng ta sử dụng đa hình tham số với phân nhóm, chúng ta có thể loại trừ tất cả điều này bởi vì kiểu của chúng ta thực sự nói lên ý nghĩa của chúng ta
<T : Num> T solve(T a, T b, T c)
Hoặc bằng từ "Nếu bạn cho tôi một số loại là số, tôi có thể giải phương trình với các hệ số đó".
Điều này đến ở rất nhiều nơi khác là tốt. Một nguồn tốt của ví dụ là chức năng mà trừu tượng qua một số loại container, ala reverse
, sort
, map
vv