Весняний РОЗПРОДАЖ

Дублювання коду

Також відомий як: Duplicate Code

Симптоми і ознаки

Два фрагменти коду виглядають майже однаковими.

Причини появи

У більшості випадків дублювання виникає тоді, коли в проекті працюють декілька авторів, причому над різними його частинами. Вони працюють над схожими задачами, але не знають, що колега вже написав схожий код, який можна використати замість написання свого.

Зустрічається і непряме дублювання, коли конкретні ділянки коду відрізняються зовні, хоча і виконують одну і ту ж задачу. Таке дублювання буває досить складно виявити і виправити.

В окремих випадках дублювання створюється навмисно. Найчастіше в поспіху, коли строки здачі проекту горять. Програміст-початківець бачить у вже написаному коді «майже такий, як треба» фрагмент, і не може встояти від спокуси просто скопіювати його як є і вставити десь в іншому місці (і так десяток разів).

В інших випадках програміст просто занадто ледачий, щоби позбавити код від дублювання.

Лікування

  • Одна і та ж ділянка коду присутня в двох методах одного і того ж класу: необхідно застосувати відокремлення методу, після чого викликати код створеного методу з обох ділянок.

  • Одна і та ж ділянка коду присутня в двох підкласах, що знаходяться на одному рівні:

  • Код, що дублюється, знаходиться в двох різних класах:

    • Якщо ці класи не є частиною якоїсь ієрархії, слід використати відокремлення суперкласу, щоб створити для цих класів один суперклас, що містить усю спільну функціональність.

    • Якщо створення суперкласу небажане або неможливе, слід застосувати відокремлення класу в одному класі, а потім використати новий компонент в іншому.

  • Якщо присутня низка умовних операторів, які виконують один і той же код і відрізняються тільки умовами, слід об’єднати ці оператори в один із загальною умовою за допомогою об’єднання умовних операторів, а також застосувати відокремлення методу, щоб винести цю умову в окремий метод із зрозумілою назвою.

  • Однаковий код виконується в усіх гілках умовного оператора: необхідно винести однаковий код за межі умовного оператора за допомогою об’єднання фрагментів з дублюванням коду в умовних операторах.

Виграш

  • Об’єднання коду, що дублюєтся, дозволяє поліпшити структуру коду і зменшити його об’єм.

  • Це, у свою чергу, веде до спрощення і здешевлення підтримки коду в майбутньому.

Не варто чіпати, якщо...

  • В окремих випадках об’єднання двох однакових ділянок коду може зробити код менш очевидним і зрозумілим.