Vẫn có những người trên thế giới không sử dụng thuốc generic trong "mã hóa thông thường". Tôi có thể tin nó với các mẫu C ++, nhưng thuốc generic? Chúng thậm chí không khó học / sử dụng. Nghiêm túc, các tính năng tốt nhất của Java và C ++ tương ứng là các mẫu và mẫu.
Cách tốt nhất để thuyết phục mọi người về mọi thứ là đưa ra một lập luận thuyết phục, không đe dọa và đúng đắn.
Vì vậy, miễn là bạn không làm điều gì đó như sử dụng các mẫu làm ngôn ngữ lập trình của mình, thì đa hình tham số (khái quát / mẫu) gần như chắc chắn là tốt.
1. Tránh sao chép mã.
Điều này là hiển nhiên, nhưng mã đa hình là mã chung. Đó là lý do tại sao nó được gọi là thuốc generic.
2. Hỗ trợ kiểm tra tĩnh tốt hơn.
Nếu không có đa hình tham số, cuối cùng bạn sẽ viết những thứ như public Object clone()
hoặc public boolean equals(object b)
không chỉ là gớm ghiếc, chúng có những loại không cung cấp thông tin về những gì chúng làm, và cuối cùng luôn ném ngoại lệ ra khắp nơi. Sự thay thế cho đa hình tham số là diễn viên ở khắp mọi nơi
3. Mã OOP không đa hình tham số về cơ bản không thể xử lý "phương thức nhị phân" một cách chính xác.
Bạn sử dụng thường xuyên.
4. Đó là thực hành tốt nhất
Trong Java, việc sử dụng thuốc generic được coi là cách thực hành tốt nhất (xem Java hiệu quả của Josh Bloch). Các nhà tư tưởng chính của C ++ như Sutter và Alexandrescu cũng khuyến khích sử dụng các mẫu để giải quyết nhiều vấn đề khác nhau.
5. Nó phù hợp với mô hình OO.
Mọi người thường không nhận thấy điều này, nhưng sự kết hợp giữa gõ phụ và khái quát tạo ra một hệ thống RẤT NHIỀU biểu cảm và hướng đối tượng hơn bất kỳ hệ thống nào chỉ có một trong số chúng.
Hãy xem xét các mixin của Scala. Đây là một tính năng hay cho phép bạn kéo các đối tượng của mình lại với nhau từ các bộ phận cấu thành. Generics và mẫu có thể mô phỏng một số lợi ích này. Ví dụ, giả sử một trong các đối tượng của bạn sử dụng cơ sở dữ liệu. Thiết kế tốt sẽ giúp bạn trừu tượng hóa việc truy cập cơ sở dữ liệu vào một lớp riêng biệt. Nếu được thực hiện đúng, điều này không chỉ cho phép bạn mô phỏng kho lưu trữ dữ liệu của bạn (chìa khóa để kiểm tra) mà còn có nghĩa là bạn có thể thêm các triển khai thay thế như cơ sở dữ liệu không có sql mới đó. Tuy nhiên, ở đây, bạn có thể gặp sự cố, cho dù bạn sử dụng triển khai nào, bạn sẽ nhận được các khả năng khác nhau của đối tượng kinh doanh của mình.
Generics để giải cứu!
public class Business<S extends Datastore>{
private S store; ...
}
Bây giờ bạn có thể bắt đầu phân biệt tĩnh các Business
đối tượng của mình dựa trên khả năng sử dụng các tính năng cụ thể của cơ sở dữ liệu. Bạn vẫn cần một số kiểm tra thời gian chạy và truyền, nhưng bạn có thể bắt đầu xây dựng mã NHIỀU tốt hơn.
và
6. Mã bình thường không tồn tại.
Chỉ có ba điều trong vũ trụ lập trình:
- thư viện,
- cấu hình và
- mã xấu.
Nếu bạn không nghĩ về mã của mình giống như đó là một thư viện, bạn sẽ gặp rắc rối nghiêm trọng khi các yêu cầu cho dự án của bạn thay đổi. Kiến trúc (được cho là) nghệ thuật thiết kế các API tốt.
Tôi thấy thái độ này tuyệt đẹp. Sau khi bạn quen với việc lập trình với các loại tham số, không sử dụng chúng chỉ khiến mọi thứ trở nên khó khăn. Và, Java và C ++ có một loạt các điểm thô mà chúng giúp khắc phục.