クラスのプロジェクトで Ruby on Rails を勉強しています。「Ruby ではすべてがオブジェクト」という言葉をよく耳にします。私が理解しているかどうかわからないのは、なぜそれが良いことなのか、それともそれが良いことなのか?
4 に答える
これは、異なる操作が両方に適用されることを意味します (確かに、最近の Java では、オブジェクト バージョンとの間の自動変換がありますが、これにより予期しないパフォーマンスの問題が発生する可能性があります) Integer
。int
オブジェクトは間接的であるため少し遅くなりますが、より柔軟です。すべてがオブジェクトであるということは、すべてが一貫して動作することを意味します。ここでも Java が例になります。配列はオブジェクトではなく、ArrayIterator
事後的に (複数のサード パーティの実装であっても) ボルトで固定されるため、コレクション クラスのイテレータの動作とは完全に一致しません。
Ruby のすべてはオブジェクトではありません (そうです、人々がそのような発言をするときに一般的に何を意味するかは知っていますが、それでも完全には真実ではありません)。「Ruby ではすべてがオブジェクトに評価される」と言った方が適切です。これは興味深い洞察であり、より適切に説明するために、単に David Black を引用します。それは良い読み物です:
これにより、Ruby は非常に柔軟になります。数値およびその他のプリミティブ型は、変更または拡張できます。
これにより、非常に洗練された構文になることもあります。
5.times { print "print this 5 times" }
他の人がすでに指摘しているように、 Javaのような他の言語にはオブジェクト以外のプリミティブがあります。コンパイラーとコンピューターにとって、最も効率的なコードを取得することは良いことですが、プログラマーは、処理対象に応じて異なる関数とメソッドを使用する必要があります。
Rubyはコンピューターではなく人間のために設計されているため、人間の生産性のために計算リソースを少し犠牲にすることは良いことだと考えられています。このように、Ruby はオブジェクトとプリミティブを区別したことがありません。初心者の学習曲線も間違いなく低下します。内部的には、Ruby はタグ付きポインターと呼ばれる手法を使用しており、プリミティブがないことによるパフォーマンスの低下は、私の知る限りそれほど悪くはありません。
もう 1 つの注目すべき点は、Ruby ではクラスもオブジェクトであるということです。つまり、コードが実行されているときでも、クラスとその動作を簡単に変更できます。この動的な性質により、プログラマーは非常に強力になり、Ruby コードは非常に簡潔に見える傾向があります。Ruby on Rails は、Ruby 言語のこの動的な側面を最大限に活用しています。