Elementor Header #8

22. Магические числа

1. Введение

Магические числа (Magic Numbers) — это непонятные числовые значения, используемые в коде без объяснения их смысла. Они затрудняют чтение, поддержку и понимание программы.

❌ Плохой пример:

				
					double total = price * 1.21; // Что такое 1.21?

				
			

Здесь 1.21 — магическое число. Без контекста сложно понять, что оно означает (например, это может быть налог).


2. Почему магические числа — это плохо?

🔴 Проблемы использования магических чисел:

  1. Непонятность – сложно догадаться, что означает число.
  2. Трудность обновления – если число встречается в коде много раз, его сложно менять.
  3. Увеличение ошибок – из-за неочевидности числа разработчики могут его неправильно использовать.
 

3. Как избавиться от магических чисел?

3.1. Использование констант

Вместо магических чисел используйте именованные константы (const).

✅ Хороший пример:

				
					const double VAT_RATE = 1.21;
double total = price * VAT_RATE;

				
			

Теперь ясно, что 1.21 – это налоговая ставка (VAT).


3.2. Использование readonly полей

Если значение должно оставаться неизменным во время работы программы, но его нужно задать при запуске, используйте readonly поля.

Пример:

				
					class Shop
{
    private readonly double discountRate;

    public Shop(double discount)
    {
        discountRate = discount;
    }

    public double GetDiscountedPrice(double price)
    {
        return price * (1 - discountRate);
    }
}

				
			

3.3. Использование перечислений (enum)

Если магические числа представляют статусы, категории или коды, используйте перечисления (enum).

❌ Плохой пример:

				
					if (status == 1) Console.WriteLine("Заказ оформлен");
else if (status == 2) Console.WriteLine("Заказ отправлен");

				
			

Здесь 1 и 2 — магические числа.

✅ Хороший пример с enum:

				
					enum OrderStatus { Placed = 1, Shipped = 2 }

if (status == (int)OrderStatus.Placed) Console.WriteLine("Заказ оформлен");
else if (status == (int)OrderStatus.Shipped) Console.WriteLine("Заказ отправлен");

				
			

Заключение

Использование магических чисел делает код непонятным, сложным в поддержке и потенциально ошибочным. Чтобы избежать проблем, используйте:

Константы (const) – для значений, которые не изменяются.
readonly поля – для значений, задаваемых при запуске программы.
Перечисления (enum) – для работы со статусами и категориями.

Следуя этим рекомендациям, вы сделаете свой код понятнее, удобнее и надежнее! 🚀

Тестовое задание

Задание:

  1. Создайте программу, в которой рассчитывается стоимость заказа с налогом.
  2. Избегайте магических чисел, используя константы.
  3. Добавьте проверку статуса заказа с использованием enum.
  4. Выведите итоговую стоимость и статус заказа.
				
					using System;

class Program
{
    // Константа налоговой ставки
    const double TAX_RATE = 1.2;

    // Перечисление статусов заказа
    enum OrderStatus { Placed = 1, Shipped = 2, Delivered = 3 }

    static void Main()
    {
        double price = 100; // Базовая цена
        double totalPrice = price * TAX_RATE;

        OrderStatus status = OrderStatus.Shipped;

        // Вывод информации
        Console.WriteLine($"Цена с налогом: {totalPrice}");
        Console.WriteLine($"Статус заказа: {status}");
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo