Arithmetic Order of Operations for the Ruby Language
When using arithmetic operators, it's important to understand the order of operations as the compiler uses a specific format to determine this order. A good way to remember this order is with the acronym PEMDAS or with the sentence: Please Excuse My Dear Aunt Sally.
Guide Tasks
  • Read Tutorial
  • Watch Guide Video
Video locked
This video is viewable to users with a Bottega Bootcamp license

When using arithmetic operators, it's important to understand the order of operations as the compiler uses a specific format to determine this order.
A good way to remember this order is with the acronym PEMDAS or with the sentence Please Excuse My Dear Aunt Sally.

What this stands for is:
- P - Parentheses
- E - Exponent
- M - Multiplication
- D - Division
- A - Addition
- S - Subtraction

So, what does this order mean for a problem/equation?

Let's say that we need to run an equation with all these operators, but in a different order. For example,

5 + 15 * 20 - 2 / 6 ** 3 - (3 + 1)

In the above problem, we have all the six operations included. If we run this code, it gives a value of 301.

To break it down, the compiler first looked for parentheses, so it computed the value (3+1), which is 4. Then, it handled the exponent 6**3, which is 216. Next is multiplication, so 20 * 15 is 300. Now for division, 2/216 will be equal to 0 (it's not really zero but we'll discuss in a future lesson). Next, it focuses on addition: 5 + 300 which equals 305. And lastly subtraction: 305 - 4 = 301.

You can see it step-by-step path here:

5 + 15 * 20 - 2 / 6 ** 3 - (3 + 1)  # parenthesis
5 + 15 * 20 - 2 / 6**3 - 4          # exponents
5 + 15 * 20 - 2 / 216 - 4           # multiplication
5 + 300 - 2 / 216 - 4               # division
5 + 300 - 0 - 4                     # addition
305 - 0 - 4                         # subtraction
301

Now, this format is not just for numbers, but also for other programming component such as conditionals (which we will cover in a future section). For example, if you have a conditional like this,

if (x > 7 && y < 19) || z == 5

The value inside the parentheses will get executed first.