Data types in Ruby aren't the data types that you're used to from the more traditional languages, such as C, COBOL, or Pascal. Because Ruby is purely object-oriented, you won't even find the primitive data types available in Java, for instance. In Ruby, you see, all data types are based upon classes.
This doesn't mean that there is no such thing as an integer or a string in Ruby; it means only that they are instances of the Integer and String classes. To some, this "everything is a class" approach might sound like overkill, but it also makes a lot of sense. Personally, I think it would be easier to code without having to change gears all the time. Just put my mind in OOP gear and go. This leaves the question, go where? I'm thinking of an island.
"I am not a number, I'm a free man!" is the somewhat well-known quote from the British television series The Prisoner. I really don't see what Number Six was complaining aboutit could have been worse. He could, for example, have had a job that he hated in a nuclear power plant, like Number Five did. Number Six does, however, share something in common with Homerer, Number Five. You see, they were both integers.
Integer, with a capital I, is the base class from which all things integer are derived. Examples of classes derived from Integer are Bignum and Fixnum. Although each has its own characteristics, they both inherit from the Integer base class, whose properties and methods appear in Table 14-1.
However, with the exception of those poor souls trapped on the island, there is more to life than integers; there's floating point, called Float in Ruby. In case you've forgotten, floating-point numbers are those numbers with fractions, like when the statisticians say that the average American family has 2.6 children. The number 2.6 is a floating-point number and, depending on my mood, is either of my two half-brothers.
As with the Integer class, the Float class has a number of properties and methods, which are described in Table 14-2.
For people who program in more than one language, there is a major advantage to strings being instances of the String class. Think of it as one-stop shopping; if something needs to be done, there's a really good chance that there is a method to do it. In fact, there are so many that I recommend going to the Ruby home page (www.ruby-lang.org/en/) to see them all.
In programming, there are always two possible answers to any question: true and false. Maybe that is why there are two classes, trueclass and Falseclass. Actually, with the dynamic nature of variables in Ruby, that is the truth. The trueclass represents a logically true value, and the Falseclass represents a logically false class.
Possibly because of the total lack of primitives, the built-in objects in Ruby are incredibly rich and varied. There are objects for hashing, objects for file access, and even an object for arrays. In many instances, if you can imagine it, an object probably already is available for what is necessary, as the following list of built-in classes shows:
Array FalseClass Bignum File::Stat Binding File Class Fixnum Continuation Float Dir Hash Exception Integer IO Regexp MatchData String Method Struct Module Struct::Tms NilClass ThreadGroup Numeric Thread Object Time Proc TrueClass Range
With all those built-in properties and methods, it might be a little while before it is necessary to write an object of our own, but it might be a good idea to give it a try. Let's say, for example, that we want to add a math class that would have two methods: add and subtract. Through diligent work and clean living, we would create the code shown in Listing 14-1.
Listing 14-1. myMath Class
That's all there is to creating and using a class in Ruby. Unfortunately, I was evil and skipped ahead a little by using variables and operators. Thinking about it, this is a little like a college class I had. After an unusually difficult test, the professor announced that no one got Question 10 correct, and perhaps the reason was that he had forgotten to teach that. Hmm ....