Pensavo che una delle pietre miliari di OOP fosse che abbiamo oggetti, che sono gli oggetti con cui siamo interessati a trattare, e quindi inviamo loro dei messaggi.
Quindi può sembrare naturale che io abbia una collezione di oggetti e ho bisogno di metterli in una stringa, quindi per farlo:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk fa allo stesso modo). Si " | "
è in qualche modo pensato come un argomento, un segno di come unirsi a esso. Può " "
anche essere , se il tabellone deve essere più semplice. Quindi l'elemento di unione " | "
non è particolarmente qualcosa che ci interessa - non sono gli oggetti principali del programma che hanno particolare importanza o significato.
Se Python lo fa usando
" | ".join(["x", "o", "o"])
È un po 'strano che sembra quasi di passare un messaggio all'argomento, per dire l'argomento su qualcosa. Forse Python è più procedurale? Dire alla stringa di giunzione di svolgere un certo compito per noi?
È per salvare l'implementazione, in modo che non dobbiamo definire un join
per ogni classe di raccolta che abbiamo? Ma non è vero che possiamo anche scrivere una sola volta per qualsiasi classe di raccolta, come in Ruby:
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(qualcosa del genere, invocando to_s
ogni elemento, facendo affidamento su to_s
ciascuna classe per fare la propria cosa, convertirsi in una stringa e poi concatenarli). Quindi non dobbiamo implementare per ciascuna stringa, hash o set, o qualunque classe di raccolta abbiamo.
O Python fuori non va sulla rotta OOP? Utilizza len("abc")
e type([])
invece "abc".len()
o [].type()
anche in Python3 sembra. Python lo fa in questo modo per motivi di design?
Maybe Python is more procedural?
Python era un linguaggio procedurale con alcune aggiunte funzionali ("Python ha acquisito lambda, reduce (), filter () e map (), per gentile concessione di un hacker Lisp che li ha persi e ha inviato patch funzionanti") fino a quello che sembra essere da qualche parte nella versione 2. È stato circa un decennio e mezzo dopo che è stato lavorato per la prima volta.