Tôi nghĩ một trong những nền tảng của OOP là, chúng tôi có các đối tượng, đó là những mục chúng tôi quan tâm để xử lý, và sau đó chúng tôi gửi tin nhắn cho họ.
Vì vậy, có vẻ tự nhiên rằng, tôi có một bộ sưu tập các mặt hàng và tôi cần đặt chúng vào một chuỗi, để làm điều đó:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk làm theo cách tương tự). Theo " | "
một cách nào đó, nó được coi là một đối số, một mã thông báo về cách tham gia nó. Nó có thể là " "
quá, nếu bảng trò chơi là đơn giản hơn. Vì vậy, yếu tố tham gia " | "
không phải là thứ chúng tôi quan tâm đặc biệt - nó không phải là đối tượng chính trong chương trình có tầm quan trọng hoặc ý nghĩa đặc biệt.
Nếu Python sử dụng nó
" | ".join(["x", "o", "o"])
Nó cảm thấy hơi kỳ lạ khi nó gần như cảm thấy như chúng ta đang gửi một thông điệp đến đối số, để nói với đối số về điều gì đó. Có lẽ Python là thủ tục hơn? Để nói với chuỗi tham gia để thực hiện một số nhiệm vụ cho chúng tôi?
Có phải để lưu thực hiện, để chúng ta không phải xác định một join
cho mỗi lớp bộ sưu tập chúng ta có? Nhưng không phải là chúng ta cũng có thể viết một lần cho bất kỳ lớp sưu tập nào, chẳng hạn như trong Ruby:
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(một cái gì đó như thế này, kêu gọi to_s
từng mục, dựa vào to_s
từng lớp để làm điều đúng đắn của riêng nó, để chuyển đổi thành một chuỗi, và sau đó nối chúng lại). Vì vậy, sau đó chúng ta không phải triển khai cho từng Chuỗi, Hash hoặc Set hoặc bất kỳ lớp bộ sưu tập nào chúng ta có.
Hay Python ra ngoài không đi theo con đường OOP? Nó sử dụng len("abc")
và type([])
thay vì "abc".len()
hoặc [].type()
thậm chí trong Python3. Python có làm theo cách này vì lý do thiết kế không?
Maybe Python is more procedural?
Python là ngôn ngữ thủ tục với một vài bổ sung chức năng ("Python thu được lambda, less (), filter () và map (), nhờ một hacker Lisp đã bỏ lỡ chúng và gửi các bản vá hoạt động") cho đến khi có vẻ như ở đâu đó trong phiên bản 2. Đó là khoảng một thập kỷ rưỡi sau khi nó được làm việc lần đầu tiên.