2012-04-12 55 views
3

我一直在研究一個類項目的Ruby on Rails。我一直聽到「Ruby中的一切都是一個對象」。我不確定我理解的是爲什麼這是一件好事,或者如果這是件好事?「一切都是對象」是好事嗎?

+1

簡短回答:一致性和靈活性(讀作「鋒利的刀」)。 – Phrogz 2012-04-12 22:41:17

+0

什麼意思?我認爲這個答案會因個人意見而有所不同。 – j4y 2012-04-12 22:45:01

+0

相關問題:http://stackoverflow.com/questions/24270/whats-the-point-of-oop – 2012-04-12 23:21:18

回答

5

一個反例是,在Java中Integer是一個對象,但int不是,這意味着不同的操作同時適用於(當然在最新的Java有自動轉換到/從對象的版本,但是這會帶來意想不到的性能問題)。由於間接性,對象稍慢一些,但更靈活;一切都是一個對象意味着一切都表現一貫。 Java也會是一個例子:一個數組不是一個對象,並且在事實之後(甚至是多個第三方實現)被閂上,因此與集合類迭代器的工作方式不一致。

+0

另一個反例:在JS'null'和'undefined'不是對象,所以當你期待數組中,如果'param'可能爲'null',則不能僅僅說'if(param.length)'。在Ruby中,你可以修改'nil'來使用自定義方法(比如Rails中的'blank?',所有對象都會響應)。 – Phrogz 2012-04-12 22:44:58

+0

在Java中,數組*是*對象 - 它們對它們沒有太多有用的東西,因此所有其他的東西(可以說)應該在數組上。 – delnan 2012-04-12 22:49:22

+0

顯然,[Oracle的計劃](http://www.javaworld.com/javaworld/jw-03-2012/120315-oracle-s-java-roadmap.html)從Java語言中徹底刪除原語。 – 2012-04-13 00:52:46

2

它使Ruby非常靈活。數字和其他原始類型可以被修改或擴展。

這也可能會導致相當優雅的語法:在Ruby中

5.times { print "print this 5 times" }

1

像其他人已指出,有不是像的Java在其他語言中對象的其他原語。對於編譯器和計算機來說,獲得最高效的代碼是一件好事,但程序員需要根據他們處理的是哪一種函數和方法來使用不同的函數和方法。

由於紅寶石是專爲人類而不是計算機,爲了人類的生產力犧牲一點計算資源被認爲是好的。因此,Ruby從來沒有區分對象和基元。它肯定會降低新手的學習曲線。在內部,Ruby使用的是一種叫做標記指針的技術,就我所知,缺乏原語的性能損失並不是那麼糟糕。

另一件值得注意的事情是,在Ruby中,類也是對象,這意味着即使在代碼運行時,也可以輕鬆修改類及其行爲。這種動態的特性賦予了程序員如此強大的功能,Ruby代碼看起來非常簡潔。 Ruby on Rails充分利用了Ruby語言的這一動態特性。

相關問題