PHP: Магические числа
Вспомним один из прошлых уроков:
<?php
$eurosCount = 1000;
$dollarsCount = $eurosCount * 1.25; // 1250
$rublesCount = $dollarsCount * 60; // 75000
print_r($rublesCount);С точки зрения профессиональной разработки, такой код «пахнет». Так описывают код, который не соответствует так называемым лучшим практикам (best practices). И причина здесь вот в чём: уже сейчас, глядя на числа 60 и 1.25, вы скорее всего задаетесь вопросом: «что это за числа?». А представьте, что будет через месяц! А как его поймет новый программист, не видевший код ранее? В нашем примере контекст восстанавливается благодаря грамотному именованию, но в реальной жизни код значительно сложнее, и поэтому догадаться до смысла чисел зачастую невозможно.
Этот «запах» вызывают магические числа (magic numbers). Числа, происхождение которых невозможно понять без глубокого знания происходящего внутри данного участка кода.
Выход из ситуации прост: достаточно создать переменные с правильными именами, как всё встанет на свои места.
<?php
$dollarsPerEuro = 1.25;
$rublesPerDollar = 60;
$eurosCount = 1000;
$dollarsCount = $eurosCount * $dollarsPerEuro; // 1250
$rublesCount = $dollarsCount * $rublesPerDollar; // 75000
print_r($rublesCount);Обратите внимание на следующие детали:
- Именование lowerCamelCase.
- Две новые переменные отделены от последующих вычислений пустой строчкой. Эти переменные имеют смысл и без вычислений, поэтому такое отделение уместно, оно повышает читаемость.
- Получился хорошо именованный и структурированный код, но он длиннее прошлой версии. Так часто бывает, и это нормально, потому что код должен быть читабельным.
Задание
Склад принял поставку. Вы столкнулись с таким кодом, который считает общее количество ящиков:
<?php
$label = 'Ящиков на складе:';
print_r($label);
print_r("\n");
print_r(6 * 17);Числа 6 и 17 здесь — магические: непонятно, что они означают. Избавьтесь от них, создав переменные с понятными именами, и выведите результат на экран.
Получится так:
Ящиков на складе:
102Названия переменных должны передавать смысл чисел, но оставаться короткими и емкими.
Помните: код будет работать с любыми названиями, а система проверяет только результат на экране — выполнение задания под вашу ответственность.
Полезное
PHP: Магические числа
Вспомним один из прошлых уроков:
<?php
$eurosCount = 1000;
$dollarsCount = $eurosCount * 1.25; // 1250
$rublesCount = $dollarsCount * 60; // 75000
print_r($rublesCount);С точки зрения профессиональной разработки, такой код «пахнет». Так описывают код, который не соответствует так называемым лучшим практикам (best practices). И причина здесь вот в чём: уже сейчас, глядя на числа 60 и 1.25, вы скорее всего задаетесь вопросом: «что это за числа?». А представьте, что будет через месяц! А как его поймет новый программист, не видевший код ранее? В нашем примере контекст восстанавливается благодаря грамотному именованию, но в реальной жизни код значительно сложнее, и поэтому догадаться до смысла чисел зачастую невозможно.
Этот «запах» вызывают магические числа (magic numbers). Числа, происхождение которых невозможно понять без глубокого знания происходящего внутри данного участка кода.
Выход из ситуации прост: достаточно создать переменные с правильными именами, как всё встанет на свои места.
<?php
$dollarsPerEuro = 1.25;
$rublesPerDollar = 60;
$eurosCount = 1000;
$dollarsCount = $eurosCount * $dollarsPerEuro; // 1250
$rublesCount = $dollarsCount * $rublesPerDollar; // 75000
print_r($rublesCount);Обратите внимание на следующие детали:
- Именование lowerCamelCase.
- Две новые переменные отделены от последующих вычислений пустой строчкой. Эти переменные имеют смысл и без вычислений, поэтому такое отделение уместно, оно повышает читаемость.
- Получился хорошо именованный и структурированный код, но он длиннее прошлой версии. Так часто бывает, и это нормально, потому что код должен быть читабельным.
Задание
Склад принял поставку. Вы столкнулись с таким кодом, который считает общее количество ящиков:
<?php
$label = 'Ящиков на складе:';
print_r($label);
print_r("\n");
print_r(6 * 17);Числа 6 и 17 здесь — магические: непонятно, что они означают. Избавьтесь от них, создав переменные с понятными именами, и выведите результат на экран.
Получится так:
Ящиков на складе:
102Названия переменных должны передавать смысл чисел, но оставаться короткими и емкими.
Помните: код будет работать с любыми названиями, а система проверяет только результат на экране — выполнение задания под вашу ответственность.
Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Variables\MagicNumbers;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = "Ящиков на складе:\n102";
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
