Free JavaScript course. Sign Up for tracking progress →

JavaScript: Magic numbers

Let's remember one of the previous lessons:

let dollarsCount = 50 * 1.25; // 62.5
let rublesCount = dollarsCount * 60; // 3750

console.log(rublesCount);

From the developer's point of view, such code "smells". It means that the code is hard to comprehend. Even now, when you look at the numbers 60 and 1.25now, you might find yourself asking, "What are those numbers?" Imagine reading it in a month from now! How could a new programmer who hasn't seen the code before understand it? In our example, you can reconstruct the context through proper naming, but in real life, the code is much more complicated, and it is often impossible to guess the meaning of numbers.

This "smell" is known as Magic Numbers. The numbers with an inexplicable origin, which you can only understand by digging deeper into the code.

The solution is simple: create variables with the right names, and everything will fall into place.

let dollarsPerEuro = 1.25;
let rublesPerDollar = 60;

let dollarsCount = 50 * dollarsPerEuro; // 62.5
let rublesCount = dollarsCount * rublesPerDollar; // 3750

console.log(rublesCount);

Note the following details:

  • lowerCamelCase naming
  • The two new variables are separated from the following computations by an empty line. These variables are meaningful even without a computation involved, which is why this separation is suitable here: it improves readability
  • The code is well named and structured, but it is longer than the previous version. It happens every so often and that's okay. The code must be readable

Instructions

You've come across some code printing the total number of rooms owned by the present king:

let king = 'King Balon the 6th';
console.log(king + ' has ' + (6 * 17) + ' rooms.');

As you can see, these numbers are magical: it is not clear what 6 and 17 are. If you know the history of the royal family, you can guess: each new king inherits all his ancestors' castles and builds a new one, an exact copy of his parents'.

This strange dynasty simply breeds identical castles...

Get rid of the magic numbers by creating new variables and print them.

You'll get this:

King Balon the 6th has 102 rooms.

The variable names should give the meaning of the numbers, but should also be short and succinct enough to be readable.

Note: The code will work with any name, and we only check the printed result, so the task is up to you.

The exercise doesn't pass checking. What to do? 😶

If you've reached a deadlock it's time to ask your question in the «Discussions». How ask a question correctly:

  • Be sure to attach the test output, without it it's almost impossible to figure out what went wrong, even if you show your code. It's complicated for developers to execute code in their heads, but having a mistake before their eyes most probably will be helpful.
In my environment the code works, but not here 🤨

Tests are designed so that they test the solution in different ways and against different data. Often the solution works with one kind of input data but doesn't work with others. Check the «Tests» tab to figure this out, you can find hints at the error output.

My code is different from the teacher's one 🤔

It's fine. 🙆 One task in programming can be solved in many different ways. If your code passed all tests, it complies with the task conditions.

In some rare cases, the solution may be adjusted to the tests, but this can be seen immediately.

I've read the lessons but nothing is clear 🙄

It's hard to make educational materials that will suit everyone. We do our best but there is always something to improve. If you see a material that is not clear to you, describe the problem in “Discussions”. It will be great if you'll write unclear points in the question form. Usually, we need a few days for corrections.

By the way, you can participate in courses improvement. There is a link below to the lessons course code which you can edit right in your browser.

If you got stuck and don't know what to do, you can ask a question in our huge and friendly community