OOPの基礎の1つは、私たちが処理したい項目であるオブジェクトを持っていること、そしてそれらにメッセージを送信することだと思いました。
したがって、当然のことながら、アイテムのコレクションがあり、それらを1つの文字列に入れる必要があるため、次のようにします。
["x", "o", "o"].join(" | ") # joining a tic-tac-toe row in Ruby
(Smalltalkも同じ方法です)。これ" | "
は、何らかの方法で、それを結合する方法の1つのトークンとしての議論と考えられています。それはすることができ" "
、ゲームボードを簡素にする場合、あまりにも。したがって、結合要素" | "
は、特に私たちが関心を持っているものではありません。特に重要または重要なのは、プログラムの主要なオブジェクトではありません。
Pythonがそれを使用する場合
" | ".join(["x", "o", "o"])
何かについて議論をするために、私たちが議論にメッセージを渡しているように感じるのは、少し奇妙に感じます。多分Pythonはもっと手続き的ですか?参加する文字列に私たちに何らかの義務を果たすように伝えるには?
実装を保存して、join
コレクションクラスごとにを定義する必要がないようにするのですか?しかし、Rubyなどの任意のコレクションクラスに対して1回だけ記述することもできるというのは本当ではありません。
module Enumerable
def my_join(joiner)
self.inject {|a,b| a.to_s + joiner + b.to_s}
end
end
(このようなものは、to_s
各項目を呼び出しto_s
、各クラスのに依存して独自の適切な処理を実行し、文字列に変換してから、それらを連結します)。そのため、文字列、ハッシュ、セットのそれぞれ、または私たちが持っているあらゆるコレクションクラスを実装する必要はありません。
または、Pythonは正しくOOPルートになりませんか?これは、使用len("abc")
してtype([])
の代わりに、"abc".len()
または[].type()
さえのpython3でもそれはそうです。Pythonは設計上の理由でこのようにしていますか?
Maybe Python is more procedural?
Pythonは、いくつかの機能が追加された手続き型言語でした(「Pythonはラムダ、reduce()、filter()、map()を取得しました。バージョンをどこかで見逃して作業パッチを提出したLispハッカーの好意により)」。 2.それが最初に取り組まれてから約10年半。