Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git! Привіт! Глянь мій новий курс по Git на GitByBit.com! Привіт! Хочеш класно освіжити Git? Глянь мій новий курс на GitByBit.com!

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

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

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

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

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

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

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

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

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

Лікування

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

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

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

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

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

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

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

Виграш

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

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

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

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