Що таке "перекос коду"?


11

У книзі O'Reilly про Scala я прочитав, що копіювання вставлення коду створює:

... створює проблеми розмитості коду, ремонту та перекосу ,

Я не бачу очевидних визначень слова перекос у контексті. Я знаю про проблеми копіювання-копіювання, але не можу змусити їх відповідати слову "перекос". Оскільки це використовується в книзі O'Reilly, я припускаю, що це справжній термін програмування в обігу.

Якісь покажчики?

Відповіді:


19

Перекидання в його найбільш традиційному визначенні означає вирівнювання (не паралельне). Очевидно, що код копіюється та вставляється, дві копії однакові та паралельні. Це не інваріант. Зміни, внесені до однієї копії, не гарантують її внесення до іншої копії (через необережність чи незнання). Зараз є дві версії коду, які існують у двох різних місцях, перекошених (вже не однакових). Це може призвести до дивних помилок, коли поведінка, здається, працює в одному місці, а не в іншому. Зберігайте свій код ДУХО (не повторюйте себе).

ВИДАЛЕННЯ / ДОПОМОГА: Якщо у вас є бажання скопіювати та вставити, більш ніж ймовірно, що вам слід зробити, це абстрагувати код, який ви копіюєте, у спільний надклас (орієнтований на об'єкт) або якусь функцію, яка включена утилітою (функціональною).


+1 для гарного пояснення. Також для катарсису - я маю мати справу з кодовою базою даних, яка складається з сотень і сотень рядків копіювально-вставного коду саме з такою проблемою, яку потрібно вирішити.
KChaloux

2

Коли-небудь грали в гру Телефон як дитина? Знаєте, той, де кожна людина шепоче фразу наступній людині в рядку, і в кінці, остання людина вимовляє фразу вголос і всі сміються над тим, наскільки вона стала від оригіналу? Це перекос. Коли ви копіюєте та вставляєте код, ви неминуче вносите невеликі зміни в одну чи кілька копій. І чим частіше ви копіюєте та вставляєте один і той же код, тим більше змін накопичується і код відхиляється від оригіналу. Я бачив код із сотнями копій та вставлених блоків, кожен з яких відрізняється від інших лише кількома символами, що майже неможливо підтримати. Якщо ви хочете вирізати і вставити розділ коду, вам, мабуть, слід хоча б розглянути можливість ввести його у власну функцію.


3
Відмінності не викликані копіюванням та вставкою. Вони викликаються тим, що відбувається після копіювання та вставки.
Стівен С

1
Цілком правда, але якби код не був скопійований і вставлений, відмінності не мали б бути.
Джим Натт

Це хороший приклад, але аналогія викривлена з концепції. За аналогією, паста створює іншу копію, тоді як у реальній концепції копія однакова, але не синхронізована, отже, викликає перекос.
Sundeep
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.