Запах кода 02 - не позволяйте таинственным числам управлять вашим кодом

Запах кода 02 - не позволяйте таинственным числам управлять вашим кодом

13 августа 2025 г.

Метод делает расчеты с большим количеством чисел без описания их семантики

TL; DR: Избегайте магических чисел без объяснения. Вы не знаете их источник и очень боитесь их изменить.

Проблемы 😔

  • Сцепление
  • Низкая проверка
  • Низкая читаемость

Решения 😃

  1. Переименовать постоянную с помощью семантического и имени (значимое и намеренное раскрытие).
  2. Заменить константы параметрами, чтобы вы можете издеваться над ними снаружи.
  3. Постоянное определение часто является другим объектом, чем постоянный (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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE