
Запах кода 02 - не позволяйте таинственным числам управлять вашим кодом
13 августа 2025 г.Метод делает расчеты с большим количеством чисел без описания их семантики
TL; DR: Избегайте магических чисел без объяснения. Вы не знаете их источник и очень боитесь их изменить.
Проблемы 😔
- Сцепление
- Низкая проверка
- Низкая читаемость
Решения 😃
- Переименовать постоянную с помощью семантического и имени (значимое и намеренное раскрытие).
- Заменить константы параметрами, чтобы вы можете издеваться над ними снаружи.
- Постоянное определение часто является другим объектом, чем постоянный (AB) пользователь.
Рефакторинг ⚙
https://hackernoon.com/improving-the-code-one-t-at-a-ime?embedable=true
https://hackernoon.com/refactoring-025-decompose-regular-expressions?embedable=true
Примеры
- Алгоритмы гипер -параметры
Контекст 💬
Magic numbers are literal values embedded directly into your code without explanation.
Они часто появляются в алгоритмах, правилах конфигурации или бизнес -логике как необъяснимые числовые значения.
Сначала они могут быть быстрее писать, но со временем они превращаются в скрытые предположения, которые никто не помнит.
Будущие сопровождающие должны догадаться о своем значении, увеличивая риск ошибок, когда значения должны измениться.
Константы помогают, но именование их осмысленно и размещение их в правильном контексте-это то, что превращает волшебное число в надежную, самоэкспланирующую часть вашего кода.
Пример кода 📖
Неправильно 🚫
<?
function energy($mass) {
return $mass * (299792 ** 2)
}
Справа 👉
# Storing magnitudes without units is another smell
class PhysicsConstants
LIGHT_SPEED = 299792458.freeze
end
def energy(mass)
mass * PhysicsConstants::LIGHT_SPEED ** 2
end
Обнаружение 🔍
Многие Линтеры могут обнаружить литералы числа в атрибутах и методах.
Теги 🏷
- Декларативный код
Уровень 🔋
- Новичок
Почему биение важна 🗺
Когда вы замените магический номер на именованную константу, вы создаетебиениемежду значением и его значением.
Это отношение один к одному гарантирует, что каждое числовое значение имеет четкую, однозначную цель в вашей системе.
Без него одно и то же число может быть использовано повторно по разным причинам, что приводит к путанице и случайной связи.
Бика между значением и значением облегчает код для навигации, тестирования и развития, не опасаясь нарушения не связанных с ними деталей.
Поколение AI 🤖
Большие языковые модели могут вводить волшебные числа при генерации кода, особенно в примерах или реализациях алгоритма.
Относитесь к сгенерированным AI ценностям с тем же подозрением, которое вы будете в любом человеческом буквальном литературе.
Всегда проверяйте, является ли число заполнителем, реальной константой или алгоритмическим параметром, и замените его значимым именем, прежде чем объединить его в производственный код.
Обнаружение ИИ 🥃
Рецензенты кода должны быть внимательны к магическим числам, представленным инструментами искусственного интеллекта, в которых часто не хватает контекста или семантического именования.
Автоматизированные линейки могут помечать литералы номера, но человеческое понимание имеет решающее значение, чтобы понять, требует ли значение рефакторинг в именованную константу.
Держите глаза открытыми для сгенерированных AI-номеров черных ящиков, которые могут проскользнуть после начальных проверок, но могут вызвать головные боли в техническом обслуживании позже.
Попробуйте их! 🛠
Помните: помощники ИИ делают много ошибок
Предлагаемое подсказка: преобразовать его в более декларативный
Без надлежащих инструкций | С конкретными инструкциями |
---|---|
Чатгпт | Чатгпт |
Клод | Клод |
Недоумение | Недоумение |
Второй пилот | Второй пилот |
Ты | Ты |
Близнецы | Близнецы |
DeepSeek | DeepSeek |
Meta AI | Meta ai |
Грок | Грок |
Qwen | Qwen |
Заключение 🏁
Вы должны обращаться и удалить свои магические номера, чтобы защитить читаемость, обслуживаемость и тестируемость вашего кода.
Четкие, семантические константы именования и отделения от своих потребителей являются важными шагами для создания чистого, более устойчивого программного обеспечения.
Каждый магический номер, который вы заменяете с помощью логики раскрытия намерения, находится в шаге от хрупкого кода и ближе к надежному профессиональному мастерству.
Не позволяйте номерам диктовать ваш код; вместо этого определяйте их цель и контекст.
Отношения 👩❤
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxii
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxvi
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-ii-o96s3wl4
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxiii
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xxxx
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-xli
Больше информации 📕
https://refactoring.guru/es/replace-magic-number-with-symbolic-constant?embedable=true
https://hackernoon.com/how-to-decouple-a-legacy-system-zf153u42?embedable=true
Кредиты 🙏
ФотоКристофер РоллернаНеспособный
В чисто функциональной программе значение [постоянной] никогда не меняется, и все же она постоянно меняется! Парадокс!
Джоэл Сполски
https://hackernoon.com/400-thought-предвидение-software-engineering-quotes?embedable=true
Эта статья является частью серии Codesmell.
https://hackernoon.com/how-to-find-the-shooky-parts-of-your-code-part-i-xqz3evd?embedable=true
Оригинал