Является ли копирование и вставка кодированием приемлемым - PullRequest
14 голосов
/ 31 декабря 2008

Принято считать, что программирование копирования и вставки - плохая идея, но как лучше всего справиться с ситуацией, когда у вас есть две функции или блоки кода, которые действительно do должны отличаться, просто несколько способов сделать их обобщение чрезвычайно грязным?

Что, если код по существу такой же, за исключением нескольких незначительных вариаций, но эти несколько незначительных вариаций не в вещах, которые легко выделить с помощью добавления параметра, методов шаблона или чего-то подобного?

В более общем случае, вы когда-нибудь сталкивались с ситуацией, когда допускали, что небольшое копирование и вставка кода действительно оправдано.

Ответы [ 14 ]

1 голос
/ 31 декабря 2008

Я избегаю вырезать и вставлять, как чума. Это даже хуже, чем его кузен клонировать и модифицировать. Если вы столкнулись с такой ситуацией, как я, я всегда готов использовать макропроцессор или другой скрипт для генерации различных вариантов. По моему опыту, единственная точка истины чрезвычайно важна.

К сожалению, макропроцессор C не очень хорош для этой цели из-за раздражающих требований цитирования для новых строк, выражений, операторов и аргументов. Я ненавижу писать

#define RETPOS(E) do { if ((E) > 0) then return; } while(0)

но это цитирование является необходимостью. Я буду часто использовать препроцессор C, несмотря на его недостатки, потому что он не добавляет другой элемент в цепочку инструментов и поэтому не требует изменения процесса сборки или Makefiles.

0 голосов
/ 31 декабря 2008

Если вы обнаружите, что у вас есть функции, которые в основном одинаковы, но в разных сценариях требуется небольшая настройка, проблема в вашем дизайне. Используйте полиморфизм и композицию вместо флагов или копирования-вставки.

0 голосов
/ 31 декабря 2008

Лучший способ (помимо преобразования в обычные функции или использования макросов) - это добавлять комментарии. Если вы комментируете, куда и куда копируется код, что такое общность, а также различия и причина для этого ... тогда ты будешь в порядке.

0 голосов
/ 31 декабря 2008

Я рад, что это помечено как субъективное, потому что это, безусловно, так! Это слишком расплывчатый пример, но я думаю, что если у вас достаточно дублированного кода, вы можете абстрагировать эти разделы и оставить разные части разными. Смысл не вставки копий в том, что у вас не будет кода, который сложно поддерживать и хрупкого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...