Введение

Копирование и вставка, иногда называемое просто вставкой, — это создание высоко повторяющегося компьютерного программного кода посредством операций копирования и вставки. Это преимущественно уничижительный термин; использующие его часто подразумевают недостаток навыков программирования и умения создавать абстракции. Это также может быть вызвано технологическими ограничениями (например, недостаточно выразительной средой разработки), поскольку в таких случаях обычно используются подпрограммы или библиотеки. Однако существуют ситуации, когда копирование и вставка кода считается допустимым или необходимым, например, для шаблонного кода, разворачивания циклов (если это не поддерживается компилятором автоматически) или определенных приемов программирования, и эта практика поддерживается некоторыми редакторами исходного кода в виде сниппетов.

Повторяющиеся задачи или вариации задачи

Одна из самых вредных форм программирования методом копирования и вставки встречается в коде, выполняющем повторяющуюся задачу или вариации одной и той же основной задачи в зависимости от некоторой переменной. Каждый экземпляр копируется сверху и вставляется повторно с незначительными изменениями. Вредные последствия включают в себя: подход копирования и вставки часто приводит к большим методам (что является признаком плохого качества кода). Каждый экземпляр создает дубликат кода, со всеми проблемами, обсуждавшимися в предыдущих разделах, но в гораздо большем масштабе. Десятки дубликатов – обычное явление, возможны сотни. Особенно сложно и дорого становится исправление ошибок в таком коде. Такой код также страдает от значительных проблем с читаемостью из-за трудности точного определения различий между каждым повторением. Это напрямую влияет на риски и затраты на изменение кода. Процедурное программирование настоятельно не рекомендует использовать копирование и вставку для повторяющихся задач. В рамках процедурной модели предпочтительным подходом к повторяющимся задачам является создание функции или подпрограммы, выполняющей однократный проход по задаче; эта подпрограмма затем вызывается вызывающей рутиной либо многократно, либо, что еще лучше, с использованием циклической структуры. Такой код называют "хорошо структурированным" и рекомендуют как более простой для чтения и более легко расширяемый. Общее правило, применимое в этом случае, – "не повторяйся".

Умышленный выбор конструкции

Копирование и вставка иногда допускается как допустимая техника программирования. Чаще всего это встречается в шаблонном коде, таком как объявления классов или импорт стандартных библиотек, или при использовании существующего шаблона кода (с пустым содержимым или заглушками функций) в качестве каркаса для заполнения. Использование программистских идиом и шаблонов проектирования аналогично программированию копированием и вставкой, поскольку они также используют типовой код. В некоторых случаях это может быть представлено в виде сниппета, который затем можно вставить при необходимости такого кода, хотя часто он просто вспоминается программистом. В других случаях идиому нельзя свести к шаблону кода. Однако в большинстве случаев, даже если идиому можно свести к коду, он будет либо достаточно длинным, чтобы его вынесли в функцию, либо достаточно коротким, чтобы его можно было ввести напрямую. Язык программирования Subtext — это исследовательский проект, направленный на "легализацию" вырезания и вставки. В этом языке вырезание и вставка является основной моделью взаимодействия и, следовательно, не считается антипаттерном.