Программирование методом копирования-вставки


Программи́рование ме́тодом копи́рования-вста́вки, C&P-программирование или копипаста в программировании — процесс создания программного кода с часто повторяющимися частями[⇨], произведёнными операциями копировать-вставить (англ. copy-paste)[1][2]. Обычно этот термин используется в уничижительном понимании для обозначения недостаточных навыков компьютерного программирования или отсутствия выразительной среды разработки, в которой, как правило, можно использовать подключаемые библиотеки.

Программирование методом копирования-вставки — распространённый антипаттерн, приводящий к появлению дублированного кода, обычно большого и сложного для восприятия. Повторяемые фрагменты кода размножают ошибку, допущенную в оригинальном коде, а многократные повторы усложняют исправление этой ошибки в копиях[1][3].

Существуют случаи[⇨], когда копипаста в программировании может быть приемлема или необходима: шаблоны, размотка цикла (когда нет автоматической поддержки компилятором), а также в случае применения некоторых парадигм программирования или в случае поддержки редакторами исходного кода в виде сниппетов.

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

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

Существует некоторое различие между программированием методом копировать-вставить и программированием типа карго-культ[англ.]. Под первым больше подразумевают сам факт многократного дублирования частей кода программы[5], второй тип может подразумевать как копирование кода для решения задачи, осуществляемое из программы или внешних источников и без понимания схемы работы кода, так и копирование частей кода без необходимости[5][6].