Are there primitive types in Ruby?
There are no primitive data types in ruby. Because ruby is a purely object-oriented language. Basically, there are data types like other languages, but these data types are classes like collections in java.
If you define any string value like "Akshay" then it is an object. You can check the below image in which "Akshay" has object_id 30300. Please click on the link to check the objects on the rails console. From more examples from the image, we can decide that everything is an object in ruby excluding keywords.
So here we can conclude ruby converted these primitive data types into classes.
Ruby console having primitive data as object
There are no primitive data types in Ruby. Every value is an object, even literals are turned into objects:
nil.class #=> NilClass
true.class #=> TrueClass
'foo'.class #=> String
:bar.class #=> Symbol
100.class #=> Integer
0x1a.class #=> Integer
0b11010.class #=> Integer
123.4.class #=> Float
1.234e2.class #=> Float
This allows you to write beautiful code like:
3.times do
puts "Hello from Ruby"
end
A core principle of Ruby is that all data should be represented as objects. Other languages such as Smalltalk follow a similar paradigm.
The benefit of this design is that it makes Ruby more elegant and easier to learn. The rules applying to objects are consistently applied to all of Ruby.
For instance, when beginners are first learning Java, the difference between the primitive type int and the wrapper class Integer can be confusing. This confusion is exacerbated by the sometimes confusing implicit conversions between the two via autoboxing.
So why would languages like Java or C# bother with primitive types? The answer is performance. Creating objects incurs additional overhead when compared with primitives.
Quoting from About Ruby
In Ruby, everything is an object. Every bit of information and code can be given their own properties and actions.
In many languages, numbers and other primitive types are not objects. Ruby follows the influence of the Smalltalk language by giving methods and instance variables to all of its types. This eases one’s use of Ruby, since rules applying to objects apply to all of Ruby.
Java chooses to preserve some primitive types mainly for performance, but you have to admit, not every type is a class does makes Java code a little awkward sometimes. The philosophy of Ruby is to make the programmer's days easier, I think making everything an object is one way to achieve this.