Eu pensei que uma das pedras angulares do OOP é que, temos objetos, que são os itens com os quais estamos interessados em lidar, e então enviamos mensagens para eles.
Portanto, pode parecer natural que eu tenha uma coleção de itens e precise colocá-los em uma única sequência, para fazê-lo:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk faz da mesma maneira). De " | "
alguma forma, é considerado um argumento, um sinal de como se juntar a ele. Pode ser " "
também, se o tabuleiro do jogo for mais simples. Portanto, o elemento de junção " | "
não é particularmente algo em que temos interesse - não são os principais objetos do programa que têm importância ou significado particular.
Se o Python fizer isso usando
" | ".join(["x", "o", "o"])
Parece um pouco estranho que quase pareça que estamos passando uma mensagem para o argumento, para contar o argumento sobre algo. Talvez o Python seja mais processual? Para dizer à cadeia de junção para realizar algum dever para nós?
É para salvar a implementação, para que não tenhamos que definir um join
para cada classe de coleção que temos? Mas não é verdade que também podemos escrever apenas uma vez para qualquer classe de coleção, como no Ruby:
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(algo assim, chamando to_s
cada item, confiando no que to_s
cada classe faz para fazer suas próprias coisas, para converter em uma sequência e concatená-las). Portanto, não precisamos implementar para cada String, Hash ou Set, ou qualquer classe de coleção que tenhamos.
Ou o Python certo não segue a rota OOP? Ele usa len("abc")
e, em type([])
vez de "abc".len()
ou [].type()
mesmo em Python3, também parece. O Python faz dessa maneira por um motivo de design?
Maybe Python is more procedural?
Python era uma linguagem processual com algumas adições funcionais ("Python adquiriu lambda, reduza (), filtra () e mapa (), cortesia de um hacker Lisp que as perdeu e enviou correções de trabalho") até o que parece estar em algum lugar na versão 2. Isso foi cerca de uma década e meia após o primeiro trabalho.