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

35 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #запахи_кода
![[Pasted image 20241112225511.png]]
> Большинство сред программирования основаны на широком применении набора примитивных типов: целых чисел, чисел с плавающей точкой и строк. Встречается немало программистов, которые не хотят создавать свои собственные фундаментальные типы, полезные для их предметной области, — например денежные единицы, координаты или диапазоны. И потому приходится встре­чаться с расчетами, которые рассматривают денежные суммы как простые числа; с вычислениями физических величин, которые игнорируют единицы измерений и добавляют дюймы к миллиметрам.
> Строки являются особенно яркими источниками запаха этого вида: номер телефона — это нечто большее, чем просто набор символов. Если даже такой тип не делает ничего иного — он по крайней мере включает согласованную логику отображения в пользовательском интерфейсе. Представление таких типов в виде строк является настолько распространенным запахом, что некоторые называют их “строково типизированными” переменными.
### **Признаки**
- Использование элементарных типов вместо маленьких объектов для небольших задач (например, валюта, диапазоны, специальные строки для телефонных номеров и т. п.)
- Использование констант для кодирования какой-то информации (например, константа `USER_ADMIN_ROLE = 1` для обозначения пользователей с ролью администратора)
- Использование строковых констант в качестве названий полей в массивах
### **Причины появления**
- Программисту понадобилось поле для хранения каких-то данных. Он подумал, что создать поле элементарного типа куда проще, чем заводить новый класс
- Примитивные типы нередко используются для «симуляции» типов. Это когда вместо отдельного типа данных вы имеете набор чисел или строк, который составляет список допустимых значений для какой-то сущности. Зачастую этим конкретным числам и строкам даются понятные имена с помощью констант, что и является причиной их широкого распространения
![[Pasted image 20241112225523.png]]
### **Рефакторинги**
- [[Замена примитива объектом (Replace Primitive with Object)]]
- [[Замена кода типа подклассами (Replace Type Code with Subclasses)]]
- [[Извлечение класса (Extract Class)]]
- [[Введение объекта параметра (Introduce Parameter Object)]]
![[Pasted image 20241112225530.png]]
### **Результат**
- Повышает гибкость кода ввиду использования объектов вместо примитивных типов
- Улучшает понимание и организацию кода
- Операции над определёнными данными теперь собраны в одном месте, и их не надо искать по всему коду. Теперь не нужно догадываться, зачем созданы все эти странные константы и почему поля содержатся в массиве
- Может вскрыть факты дублирования кода
### **Ссылки**
- [https://refactoring.guru/ru/smells/primitive-obsession](https://refactoring.guru/ru/smells/primitive-obsession)
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]