Elementor Header #8

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

1. Введение

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

2. Определение магических чисел

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

2.1. Пример магического числа

Пример:

				
					public class DiscountCalculator {
    public double calculateDiscount(double amount) {
        return amount * 0.15; // 0.15 — магическое число
    }
}

				
			

В данном примере значение 0.15 представляет собой процент скидки, но оно не поясняется и не ясно, откуда оно взялось.

3. Почему следует избегать магических чисел

Использование магических чисел в коде может вызвать несколько проблем:

  • Непонятность кода: Другим разработчикам будет сложно понять, что именно означает число, особенно если его использование не документировано.
  • Сложность изменений: Если значение нужно изменить, его может быть сложно найти в коде, особенно если оно используется в нескольких местах.
  • Отсутствие гибкости: При необходимости изменить значение или добавить новую функциональность код становится менее гибким и сложным для модификации.

4. Как избегать магических чисел

Для устранения магических чисел из вашего кода, используйте именованные константы. Константы объявляются с помощью ключевого слова final и обычно именуются с использованием заглавных букв и подчеркиваний.

4.1. Пример использования констант вместо магических чисел

Пример:

				
					public class DiscountCalculator {
    private static final double DISCOUNT_RATE = 0.15; // Константа вместо магического числа

    public double calculateDiscount(double amount) {
        return amount * DISCOUNT_RATE;
    }
}

				
			

В этом примере DISCOUNT_RATE является константой, которая поясняет, что значение 0.15 представляет собой процент скидки. Это делает код более понятным и легче поддерживаемым.

5. Именование констант

При создании констант следуйте следующим рекомендациям:

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

Примеры:

				
					public static final int MAX_USERS = 100;
public static final double PI = 3.14159;
public static final String ERROR_MESSAGE = "An error has occurred.";

				
			

6. Распространённые ошибки и их исправление

6.1. Ошибка: Неявное значение

Ошибка:

				
					public class Payment {
    public double calculateTax(double amount) {
        return amount * 0.08; // Неясно, что это за значение
    }
}

				
			

Исправление:

				
					public class Payment {
    private static final double TAX_RATE = 0.08; // Явное значение
    
    public double calculateTax(double amount) {
        return amount * TAX_RATE;
    }
}

				
			

6.2. Ошибка: Использование констант в неправильных местах

Ошибка:

				
					public class Rectangle {
    private double width;
    private double height;
    
    public double calculateArea() {
        return width * height * 1.0; // Использование магического числа 1.0
    }
}

				
			

Исправление:

				
					public class Rectangle {
    private static final double UNIT_CONVERSION_FACTOR = 1.0;
    private double width;
    private double height;
    
    public double calculateArea() {
        return width * height * UNIT_CONVERSION_FACTOR;
    }
}

				
			

Заключение

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

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

Ваше задание — написать программу, которая:

  1. Использует магические числа и затем заменяет их на именованные константы.
  2. Демонстрирует, как именование констант улучшает читаемость и поддержку кода.

Пример программы:

				
					public class TaxCalculator {
    // Использование магического числа
    public double calculateTax(double amount) {
        return amount * 0.07; // Магическое число
    }

    public static void main(String[] args) {
        TaxCalculator calculator = new TaxCalculator();
        double amount = 100.0;
        System.out.println("Tax on " + amount + " is: " + calculator.calculateTax(amount));
    }
}

public class ImprovedTaxCalculator {
    private static final double TAX_RATE = 0.07; // Константа вместо магического числа

    public double calculateTax(double amount) {
        return amount * TAX_RATE;
    }

    public static void main(String[] args) {
        ImprovedTaxCalculator calculator = new ImprovedTaxCalculator();
        double amount = 100.0;
        System.out.println("Tax on " + amount + " is: " + calculator.calculateTax(amount));
    }
}

				
			

Ожидаемый результат:

				
					Tax on 100.0 is: 7.0
Tax on 100.0 is: 7.0

				
			

Проверьте свою программу, чтобы убедиться, что она правильно выполняет все операции и обрабатывает возможные ошибки.

logo