Base/Knowledges/IT/Рефакторинг/Запахи кода/Одержимость примитивами.md
2026-02-23 19:52:05 +03:00

4.8 KiB
Raw Permalink Blame History

#рефакторинг #запахи_кода

!Pasted image 20241112225511.png

Большинство сред программирования основаны на широком применении набора примитивных типов: целых чисел, чисел с плавающей точкой и строк. Встречается немало программистов, которые не хотят создавать свои собственные фундаментальные типы, полезные для их предметной области, — например денежные единицы, координаты или диапазоны. И потому приходится встре­чаться с расчетами, которые рассматривают денежные суммы как простые числа; с вычислениями физических величин, которые игнорируют единицы измерений и добавляют дюймы к миллиметрам. Строки являются особенно яркими источниками запаха этого вида: номер телефона — это нечто большее, чем просто набор символов. Если даже такой тип не делает ничего иного — он по крайней мере включает согласованную логику отображения в пользовательском интерфейсе. Представление таких типов в виде строк является настолько распространенным запахом, что некоторые называют их “строково типизированными” переменными.

Признаки

  • Использование элементарных типов вместо маленьких объектов для небольших задач (например, валюта, диапазоны, специальные строки для телефонных номеров и т. п.)
  • Использование констант для кодирования какой-то информации (например, константа USER_ADMIN_ROLE = 1 для обозначения пользователей с ролью администратора)
  • Использование строковых констант в качестве названий полей в массивах

Причины появления

  • Программисту понадобилось поле для хранения каких-то данных. Он подумал, что создать поле элементарного типа куда проще, чем заводить новый класс
  • Примитивные типы нередко используются для «симуляции» типов. Это когда вместо отдельного типа данных вы имеете набор чисел или строк, который составляет список допустимых значений для какой-то сущности. Зачастую этим конкретным числам и строкам даются понятные имена с помощью констант, что и является причиной их широкого распространения

!Pasted image 20241112225523.png

Рефакторинги

!Pasted image 20241112225530.png

Результат

  • Повышает гибкость кода ввиду использования объектов вместо примитивных типов
  • Улучшает понимание и организацию кода
  • Операции над определёнными данными теперь собраны в одном месте, и их не надо искать по всему коду. Теперь не нужно догадываться, зачем созданы все эти странные константы и почему поля содержатся в массиве
  • Может вскрыть факты дублирования кода

Ссылки