Tôi thấy sự kết hợp của cú pháp của python về cú pháp hướng đối tượng this.method()
và thủ tục / chức năng method(this)
rất đáng lo ngại:
x = [0, 1, 2, 3, 4]
x.count(1)
len(x)
any(x)
x.reverse()
reversed(x)
x.sort()
sorted(x)
Điều này đặc biệt xấu vì một số lượng lớn các hàm (chứ không phải các phương thức) chỉ được đưa vào không gian tên toàn cục : các phương thức liên quan đến danh sách, chuỗi, số, hàm tạo, siêu lập trình, tất cả được trộn lẫn trong một danh sách lớn được sắp xếp theo thứ tự bảng chữ cái.
Ít nhất, các ngôn ngữ chức năng như F # có tất cả các chức năng được đặt tên đúng trong các mô-đun:
List.map(x)
List.reversed(x)
List.any(x)
Vì vậy, họ không phải là tất cả với nhau. Hơn nữa, đây là một tiêu chuẩn được tuân theo trong toàn bộ thư viện, vì vậy ít nhất nó cũng phù hợp.
Tôi hiểu lý do để thực hiện chức năng so với phương thức , nhưng tôi vẫn nghĩ rằng việc trộn chúng như thế này là một ý tưởng tồi. Tôi sẽ vui hơn nhiều nếu cú pháp phương thức được tuân theo, ít nhất là cho các hoạt động chung:
x.count(1)
x.len()
x.any()
x.reverse()
x.reversed()
x.sort()
x.sorted()
Cho dù các phương thức có đột biến hay không, có chúng là các phương thức trên đối tượng có một số lợi thế:
- Một nơi duy nhất để tra cứu các hoạt động "phổ biến" trên kiểu dữ liệu: các thư viện khác / v.v. có thể có những thứ ưa thích khác mà chúng có thể làm với các kiểu dữ liệu nhưng các hoạt động "mặc định" đều nằm trong các phương thức của đối tượng.
- Không cần phải lặp lại
Module
khi gọi Module.method(x)
. Lấy ví dụ về Danh sách chức năng ở trên, tại sao tôi phải nói đi nói List
lại? Nó nên biết rằng đó là một List
và tôi không muốn gọi Navigation.map()
hàm trên nó! Sử dụng x.map()
cú pháp giữ cho nó KHÔ và vẫn không rõ ràng.
Và tất nhiên nó có lợi thế so với cách làm việc trong không gian tên toàn cầu . Không phải là cách hiện tại không có khả năng hoàn thành công việc. Nó thậm chí còn khá ngắn gọn ( len(lst)
), vì không có gì được đặt tên! Tôi hiểu những lợi thế của việc sử dụng các hàm (hành vi mặc định, v.v.) so với các phương thức, nhưng tôi vẫn không thích nó.
Nó chỉ lộn xộn. Và trong các dự án lớn, sự lộn xộn là kẻ thù tồi tệ nhất của bạn.