Вопрос проверяет понимание проблем, связанных с использованием захардкоженных значений (магических чисел/строк) в коде, и зачем их нужно выносить в константы или конфигурационные файлы.
Захардкоженные значения, часто называемые "магическими числами" или "магическими строками", — это литералы (например, 100, "admin", 3.14), которые появляются в коде без какого-либо контекстного объяснения. Их использование напрямую в логике программы создаёт несколько серьёзных проблем для разработки и поддержки проекта.
SECONDS_IN_DAY сразу делает намерение разработчика ясным.Рассмотрим фрагмент кода с захардкоженными значениями:
// Плохо: захардкоженные значения
function calculateDiscount(price) {
if (price > 1000) {
return price * 0.1; // Что такое 1000 и 0.1?
}
return 0;
}
function getUserRole() {
return "admin"; // Роль зашита в коде
}Рефакторинг с выносом значений в константы или конфигурацию:
// Хорошо: значения вынесены в именованные константы
const DISCOUNT_THRESHOLD = 1000;
const DISCOUNT_RATE = 0.1;
const USER_ROLES = {
ADMIN: 'admin',
USER: 'user'
};
function calculateDiscount(price) {
if (price > DISCOUNT_THRESHOLD) {
return price * DISCOUNT_RATE;
}
return 0;
}
function getUserRole() {
return USER_ROLES.ADMIN; // Теперь ясно, что возвращается роль
}
// Для конфигурационных параметров (например, из переменных окружения)
const API_BASE_URL = process.env.API_URL || 'https://api.example.com';Такой подход не только делает код самодокументируемым, но и централизует управление критическими значениями. Для конфигурации, зависящей от окружения, используются файлы конфигурации (.env, config.json) или системы управления конфигурацией.
Вывод: Избегайте захардкоженных значений в бизнес-логике и коде, который может меняться. Выносите их в именованные константы для повышения читаемости и в конфигурационные файлы/переменные окружения для обеспечения гибкости и безопасности при развёртывании в разных средах.