Помимо неопытности, могут появиться повторяющиеся вхождения кода:
Нет времени на надлежащий рефакторинг
Большинство из нас работает в реальном мире, где реальные ограничения заставляют нас быстро переходить к реальным проблемам, вместо того чтобы думать о том, как сделать код лучше. Итак, копируем и вставляем и идем дальше. Со мной, если я потом увижу, что код дублируется еще несколько раз, это знак того, что мне нужно потратить на него еще немного времени и свести все экземпляры к одному.
Обобщение кода невозможно/некрасиво из-за языковых ограничений
Предположим, что глубоко внутри функции у вас есть несколько операторов, которые сильно отличаются от экземпляра к экземпляру одного и того же дублированного кода. Например: у меня есть функция, которая рисует двухмерный массив миниатюр для видео, и в нее встроен расчет каждой позиции миниатюры. Чтобы рассчитать хит-тест (рассчитать индекс эскиза по позиции клика), я использую тот же код, но без рисования.
Вы не уверены, что вообще будет обобщение
Сначала дублируйте код, а потом наблюдайте, как он будет развиваться. Поскольку мы пишем программное обеспечение, мы можем разрешить «как можно более поздние» модификации программного обеспечения, поскольку все «мягко» и изменчиво.
Добавлю еще, если что-то еще вспомню.
Добавлено позже...
Развертывание цикла
Во времена, когда компиляторы не были умнее Эйнштейна и Хокинга вместе взятых, вам приходилось развертывать циклы или встроенный код, чтобы работать быстрее. Развертывание цикла сделает ваш код дублированным и, возможно, быстрее на несколько процентов, компилятор все равно не сделал этого за вас.
person
Daniel Mošmondor
schedule
01.09.2009