Знакомая картина?
if status == 3:
send_email()
elif status == 7:
refund_order()
❓ Что такое 3 и 7? Статусы заказа? Коды ошибок? Разработчик, который писал это полгода назад, уже не вспомнит. А новому - придется гадать.
Магическое число - это число, вписанное прямо в код без пояснения, что оно означает. Оно «магическое», потому что его значение понятно только автору (и то не всегда).
Почему это плохо:
- Непонятно: читателю кода приходится искать документацию или лезть в историю коммитов
- Сложно менять: если число используется в 10 местах, а значение поменялось - правь везде, и не ошибись
- Легко сломать: случайно перепутал 3 и 4 - и логика поехала
Но это легко исправить, просто вынеси число в константу или enum:
ORDER_STATUS_PENDING_REFUND = 3
if order_status == ORDER_STATUS_PENDING_REFUND:
process_refund()
from enum import IntEnum
class OrderStatus(IntEnum):
CREATED = 1
PAID = 2
PENDING_REFUND = 3
REFUNDED = 4
if order.status == OrderStatus.PENDING_REFUND:
process_refund()
Так что если число не равно 0, 1 или -1 и не очевидно из контекста - не ленись и дай ему имя! 👀
Кстати, другие полезные советы про то как не надо писать код мы давали в нашем видео про то как не надо писать код ➡️ https://youtu.be/a4fVPvDTYVQ
👍 — если было полезно, и сохранить не забудь, чтобы не магичить потом
#историческаясправкаMerion
