Что такое «перекос кода»?

11

В книге О'Рейли о Scala я читал, что копирование кода создает:

... создает проблемы раздувания кода, удобства сопровождения и перекоса ,

Я не вижу каких-либо очевидных определений этого слова в контексте. Я знаю о проблемах с копированием, но не могу привести их в соответствие со словом «перекос». Так как это используется в книге О'Рейли, я предполагаю, что это настоящий термин программирования в обращении.

Есть указатели?

Джо
источник

Ответы:

19

Наклон в его наиболее традиционном определении означает несоосность (не параллельность). Очевидно, что когда код копируется и вставляется, две копии идентичны и параллельны. Это не инвариант. Изменения, внесенные в одну копию, не гарантируют внесение в другую копию (из-за небрежности или невежества). Теперь есть две версии кода, существующие в двух разных местах, которые перекошены (больше не совпадают). Это может привести к странным ошибкам, когда поведение работает в одном месте, а не в другом. Держите ваш код СУХИМ (не повторяйте себя).

РЕДАКТИРОВАНИЕ / ДОБАВЛЕНИЕ: Если у вас есть желание скопировать и вставить, более чем вероятно, что вам следует сделать, это абстрагировать код, который вы копируете, в общий суперкласс (объектно-ориентированный) или какую-то вспомогательную функцию (функционал).

Патрик Джеймс Макдугл
источник
+1 за хорошее объяснение. Также для некоторого катарсиса - мне приходится иметь дело с кодовой базой, которая состоит из сотен и сотен строк кода копирования-вставки именно с такой проблемой, которая должна быть исправлена.
KChaloux
2

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

Джим Натт
источник
3
Различия не вызваны копированием и вставкой. Они вызваны тем, что происходит после копирования и вставки.
Стивен С
1
Совершенно верно, но если бы код не был скопирован и вставлен, различий бы не было.
Джим Натт
Это хороший пример, но аналогия искажена из концепции. По аналогии, вставка создает другую копию, в то время как в реальной концепции копия является той же самой, но не синхронизирована, следовательно, вызывает перекос.
Sundeep