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

Aug 15, 2011 07:02



Жена посылает мужа-программиста в магазин:
- Дорогой, купи, пожалуйста, палку колбасы, и если будут яйца, то купи десяток.
Через полчаса программист возвращается с десятью палками колбасы.
Жена:
- Что это?! Зачем ты купил столько колбасы?
Программист:
- Ну так яйца-то были...

Рассмотрим этот пример с программерской точки зрения. Проверка на наличие яиц в данном примере является "дурнопахнущим кодом" (smell), так как содержит в себе запрос с установкой значения. Под запросом понимается - "есть ли яйца". Под установкой значения - переключение контекста с колбасы на яйца с дальнейшим помещением выбранного объекта в корзину. То есть жена, подразумевала, что муж переключит контекст, то есть фокус внимания на полку с яйцами после проверки, и объекты "яйца" переместит в корзину. Программист же поступил правильно, читая код буквально
Чтобы улучшить качество данного алгоритма, мы должны сделать неявное явным: "если будут яйца, то переключись с колбас на яйца и купи 10 штук", или по простому "если будут яйца, купи их 10 штук".

Более детально с этим рефакторингом вы можете разобраться в книге Мартина Фаулера "Рефакторинг" или в скудной версии ознакомиться на сайте http://refactoring.com/catalog/separateQueryFromModifier.html.
В целом использование "подразумеваемой" логики не такая уж и плохая вещь. Это позволяет уменьшить количество передаваемой информации, за счёт уже заранее известной. Или наоборот выработка определенного соглашения порождает некую метаинформацию полезную для восприятия сообщения. Яркий пример - соглашение по наименованию. Использование шаблонов проектирования - более полезный пример. Когда знание о стурктуре решения передаётся косвено. А незнающий человек (например шаблон visitor) долго будет думать, что же автор кода хотел этим сказать. Вернёмся к яйцам. В быту это нормально, когда сработавшаяся команда вырабатывает некоторые устоявшиеся термины, подходы и решения - это создаёт метаинформацию относительно кода. Банальный пример, когда мета-информация влияет на людей, это когда новый человек в команде должен потратить 3-6 месяцев на подключение к проекту. Первые месяца он только изучает, знакомиться с этой мета информацией, чтобы полноценно подключится к проекту. Но это отдельная тема.
Вывод: пишите чистый код и боритесь с "подразумеваемой" логикой. Пишите код для людей, а не для экстрасенсов.

качество кода, рефакторинг

Previous post Next post
Up