Tôi vừa đọc một trong những bài báo của Joel trong đó anh ấy nói:
Nói chung, tôi phải thừa nhận rằng tôi hơi sợ các tính năng ngôn ngữ che giấu mọi thứ . Khi bạn nhìn thấy mã
i = j * 5;
Ít nhất là trong C bạn biết rằng j đang được nhân với năm và kết quả được lưu trữ trong i.
Nhưng nếu bạn thấy cùng một đoạn mã trong C ++, bạn không biết gì cả. Không có gì. Cách duy nhất để biết những gì thực sự xảy ra trong C ++ là tìm ra loại i và j là gì, thứ gì đó có thể được khai báo ở đâu đó hoàn toàn khác. Đó là bởi vì j có thể thuộc loại đã
operator*
quá tải và nó làm điều gì đó cực kỳ dí dỏm khi bạn cố gắng nhân nó.
(Nhấn mạnh của tôi.) Sợ các tính năng ngôn ngữ che giấu mọi thứ? Làm thế nào bạn có thể sợ điều đó? Không che giấu những thứ (còn được gọi là trừu tượng ) một trong những ý tưởng chính của lập trình hướng đối tượng? Mỗi khi bạn gọi một phương thức a.foo(b)
, bạn không biết mình có thể làm gì. Bạn phải tìm ra loại a
và loại b
, một cái gì đó có thể được khai báo ở đâu đó hoàn toàn khác. Vì vậy, chúng ta có nên loại bỏ lập trình hướng đối tượng, bởi vì nó che giấu quá nhiều thứ từ lập trình viên?
Và làm thế j * 5
nào khác với j.multiply(5)
, mà bạn có thể phải viết bằng ngôn ngữ không hỗ trợ quá tải toán tử? Một lần nữa, bạn sẽ phải tìm ra kiểu j
và nhìn trộm bên trong multiply
phương thức, bởi vì lo và kìa, j
có thể là một loại có một multiply
phương thức làm một cái gì đó rất dí dỏm.
"Muahaha, tôi là một lập trình viên độc ác đặt tên cho một phương thức multiply
, nhưng những gì nó thực sự làm là hoàn toàn tối nghĩa và không trực quan và hoàn toàn không có gì để làm với nhiều thứ." Đó có phải là một kịch bản chúng ta phải xem xét khi thiết kế một ngôn ngữ lập trình? Sau đó, chúng ta phải từ bỏ định danh từ các ngôn ngữ lập trình với lý do chúng có thể gây hiểu nhầm!
Nếu bạn muốn biết phương thức làm gì, bạn có thể xem lướt qua tài liệu hoặc xem lén trong quá trình thực hiện. Quá tải toán tử chỉ là đường cú pháp và tôi không thấy nó thay đổi trò chơi như thế nào.
Vui lòng làm sáng tỏ cho tôi.