Operators are methods

As you have seen a number has methods named like the arithmetic operators +, -, *, and /. That’s right! Interesting.

If you think about this, it makes sense: If everything is an object then numbers are objects. If “doing things” means operating with methods by the way of calling them, then what would + be? A method of course.

But if we call methods on objects using that dot . notation, then where are the dots in 2 + 3 * 4?

The trick is: Ruby adds them for you, silently. If you write the following code:

number = 2 + 3 * 4

Then Ruby will translate this to the following:

number = 2.+(3.*(4))

Fun, isn’t it? These operators are all methods on numbers, and they can be called just like any other method. (The same is true for lots of other operators, as you can see in IRB, when you run 1.methods.sort.) The code above is valid Ruby code, and both lines do exactly the same.

Ruby just adds a little bit of syntax in order to make it easier to read and write for us: It allows us to write number = 2 + 3 * 4 instead of number = 2.+(3.*(4)), which is a pretty nasty thing to type.

This is something called “syntax sugar”, because it makes the language more sweet (no kidding).

By the way, this works the same way for other things too.

For example, you have learned about the array and hash syntax that uses square brackets [] for reading and writing.

Ruby translates this code:

array = [1, 2, 3]
array[3] = 4
puts array[3]

hash = { :one => 'eins', :two => 'zwei' }
hash[:three] = 'drei'
puts hash[:three]

to these method calls:

array = [1, 2, 3]
array.[]=(3, 4)
puts(array.[](3))

hash = { :one => 'eins', :two => 'zwei' }
hash.[]=(:three, 'drei')
puts(hash.[](:three))

Knowing this can be useful when you want to write classes that look and feel similar to arrays or hashes, but behave differently.