web-dev-qa-db-ja.com

Rubyにプリミティブ型はありますか?

私はRubyを学び始めたばかりのJava開発者です。Rubyにはプリミティブ型がありますか?それらのリストが見つからないようです。 。そうでない場合、なぜですか?

24
emily

Rubyの基本原則は、すべてのデータをオブジェクトとして表す必要があるということです。Smalltalkなどの他の言語も同様のパラダイムに従います。

この設計の利点は、Rubyがよりエレガントで、習得しやすくなることです。オブジェクトに適用されるルールは、すべてのRubyに一貫して適用されます。

たとえば、初心者が最初にJavaを学習するとき、プリミティブ型intとラッパークラスIntegerの違いは混乱を招く可能性があります。この混乱は、オートボクシングを介した2つの間の暗黙の変換が時々混乱することによって悪化します。

では、なぜJavaやC#のような言語がプリミティブ型に煩わされるのでしょうか?答えはパフォーマンスです。オブジェクトを作成すると、プリミティブと比較して追加のオーバーヘッドが発生します。

34
dbyrne

Rubyにはプリミティブデータ型はありません。すべての値はオブジェクトであり、リテラルでさえオブジェクトに変換されます。

nil.class      #=> NilClass
true.class     #=> TrueClass
'foo'.class    #=> String
100.class      #=> Integer
0x1a.class     #=> Integer
0b11010.class  #=> Integer
123.4.class    #=> Float
1.234e2.class  #=> Float

これにより、美しいコードを書くことができます。

3.times do
  puts "Hello from Ruby"
end
15
Stefan

Rubyについて からの引用

Rubyでは、すべてがオブジェクトです。情報とコードのすべてのビットに、独自のプロパティとアクションを与えることができます。

多くの言語では、数値やその他のプリミティブ型はオブジェクトではありません。 Rubyは、すべてのタイプにメソッドとインスタンス変数を与えることで、Smalltalk言語の影響を受けます。これにより、オブジェクトに適用されるルールがすべてのRubyに適用されるため、Rubyの使用が容易になります。

Javaは主にパフォーマンスのためにいくつかのプリミティブ型を保持することを選択しますが、すべての型がクラスであるとは限らないことを認める必要がありますJavaコードは時々少し厄介になります。Rubyは、プログラマーの日々を楽にすることです。すべてをオブジェクトにすることは、これを達成するための1つの方法だと思います。

5
Yu Hao