OOP'un temel taşlarından birinin, ilgilenmek istediğimiz öğeler olan nesnelerimiz olduğunu ve sonra onlara mesajlar gönderdiğimizi düşündüm.
Yani doğal görünebilir, ben bir koleksiyon öğeleri var ve bunu yapmak için onları bir dizeye koymak gerekir:
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalk bunu aynı şekilde yapar). Bir " | "
şekilde bir argüman olarak düşünülür, ona nasıl katılacağının bir simgesi. Bu olabilir " "
oyun tahtası basit olacaksa da. Dolayısıyla, birleştirme unsuru " | "
özellikle ilgilendiğimiz bir şey değildir - programdaki özel önemi veya önemi olan ana nesneler değildir.
Python bunu kullanarak yaparsa
" | ".join(["x", "o", "o"])
Bir şey hakkında tartışmayı anlatmak için tartışmaya bir mesaj aktarıyormuşuz gibi hissettirmek biraz garip geliyor. Belki Python daha prosedüreldir? Birleştirme dizesine bizim için bir görev yapmasını söylemek
Uygulamayı kaydetmek mi, böylece sahip olduğumuz join
her toplama sınıfı için bir tanımlamak zorunda kalmıyor muyuz? Ancak Ruby gibi herhangi bir koleksiyon sınıfı için sadece bir kez yazabileceğimiz doğru değil:
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(böyle bir şey to_s
, her bir öğeyi çağırmak , her to_s
sınıfın kendi uygun şeyi yapmak, bir dizeye dönüştürmek ve sonra bunları birleştirmek) güvenerek . Bu nedenle, String, Hash veya Set'in her birine veya sahip olduğumuz koleksiyon sınıfına uygulamak zorunda değiliz.
Yoksa Python out doğru OOP yoluna gitmiyor mu? Bu kullanır len("abc")
ve type([])
yerine "abc".len()
ya [].type()
da Python3 da öyle görünüyor içinde. Python bunu bir tasarım nedeni ile yapıyor mu?
Maybe Python is more procedural?
Python, sürümde bir yerde görünene kadar birkaç işlevsel eklemeyle ("Python, lambda, reduce (), filter () ve map (), onları özleyen ve çalışma yamaları sunan" Lisp hacker'ın izniyle) prosedürel bir dildi. 2. Bu, ilk çalıştıktan yaklaşık on buçuk yıl sonraydı.