PHP: Magic numbers
Let's remember one of the previous lessons:
<?php
$eurosCount = 1000;
$dollarsCount = $eurosCount * 1.25; // 1250
$rublesCount = $dollarsCount * 60; // 75000
print_r($rublesCount);From the developer's point of view, such code "smells". This describes code that doesn't conform to so-called best practices. And here's the reason. If you're looking at the numbers 60 and 1.25, you'll probably be wondering, "What are those numbers? Imagine reading a month from now! How could a new programmer who hasn't seen the code before understand it? In our example, the context is restored through proper naming, but real life code is much more complicated, and therefore it's often impossible to guess the meaning of the numbers.
This "smell" is caused by magic numbers. They're numbers that you can't explain the origin of, unless you dig deeper into the code.
The way out is simple: just create variables with the right names and everything will be as they need to be.
<?php
$dollarsPerEuro = 1.25;
$rublesPerDollar = 60;
$eurosCount = 1000;
$dollarsCount = $eurosCount * $dollarsPerEuro; // 1250
$rublesCount = $dollarsCount * $rublesPerDollar; // 75000
print_r($rublesCount);Note the following details:
- lowerCamelCase naming
- The two new variables are separated from the following computations by an empty string. These variables are meaningful even without any computation involved, which is why separating them here is good, it makes it easier to read.
- The code is well named and structured, but it's longer than the previous version. This is often the case, but it's fine, because the code needs to be readable.
Instructions
The warehouse received a delivery. You've come across this code, which counts the total number of boxes:
<?php
$label = 'Ящиков на складе:';
print_r($label);
print_r("\n");
print_r(6 * 17);The numbers 6 and 17 here are magic: it's unclear what they mean. Get rid of them by creating variables with meaningful names, and print the result to the screen.
You'll get this:
Ящиков на складе:
102Variable names should convey the meaning of the numbers, but remain short and concise.
Remember: the code will work with any names, and the system only checks the result on the screen — completing the task is your responsibility.
Tips
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.
PHP: Magic numbers
Let's remember one of the previous lessons:
<?php
$eurosCount = 1000;
$dollarsCount = $eurosCount * 1.25; // 1250
$rublesCount = $dollarsCount * 60; // 75000
print_r($rublesCount);From the developer's point of view, such code "smells". This describes code that doesn't conform to so-called best practices. And here's the reason. If you're looking at the numbers 60 and 1.25, you'll probably be wondering, "What are those numbers? Imagine reading a month from now! How could a new programmer who hasn't seen the code before understand it? In our example, the context is restored through proper naming, but real life code is much more complicated, and therefore it's often impossible to guess the meaning of the numbers.
This "smell" is caused by magic numbers. They're numbers that you can't explain the origin of, unless you dig deeper into the code.
The way out is simple: just create variables with the right names and everything will be as they need to be.
<?php
$dollarsPerEuro = 1.25;
$rublesPerDollar = 60;
$eurosCount = 1000;
$dollarsCount = $eurosCount * $dollarsPerEuro; // 1250
$rublesCount = $dollarsCount * $rublesPerDollar; // 75000
print_r($rublesCount);Note the following details:
- lowerCamelCase naming
- The two new variables are separated from the following computations by an empty string. These variables are meaningful even without any computation involved, which is why separating them here is good, it makes it easier to read.
- The code is well named and structured, but it's longer than the previous version. This is often the case, but it's fine, because the code needs to be readable.
Instructions
The warehouse received a delivery. You've come across this code, which counts the total number of boxes:
<?php
$label = 'Ящиков на складе:';
print_r($label);
print_r("\n");
print_r(6 * 17);The numbers 6 and 17 here are magic: it's unclear what they mean. Get rid of them by creating variables with meaningful names, and print the result to the screen.
You'll get this:
Ящиков на складе:
102Variable names should convey the meaning of the numbers, but remain short and concise.
Remember: the code will work with any names, and the system only checks the result on the screen — completing the task is your responsibility.
Tips
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.
Your exercise will be checked with these tests:
<?php
namespace HexletBasics\Variables\MagicNumbers;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = "Ящиков на складе:\n102";
$this->assertOutput($expected);
}
}Teacher's solution will be available in:
20:00
