Есть ли у кого-нибудь инструмент или какая-то рекомендуемая практика, как найти фрагмент кода, который похож на какой-то другой код?
Часто я пишу функцию или фрагмент кода, и я помню, что я уже писал что-то подобное раньше, и хотел бы повторно использовать предыдущую реализацию, однако использование обычного текстового поиска ничего не раскрывает, поскольку я не использовал переменную имена, которые будут точно такими же.
Наличие подобных фрагментов кода приводит к ненужному дублированию кода, однако с большой базой кода невозможно сохранить весь код в памяти. Существуют ли какие-либо инструменты, которые бы выполняли некоторый анализ кода и отмеченных фрагментов или функций, которые "схожи" с точки зрения функциональности?
Рассмотрим следующие примеры:
float xDistance = 0, zDistance = 0;
if (camPos.X()<xgMin) xDistance = xgMin-camPos.X();
if (camPos.X()>xgMax) xDistance = camPos.X()-xgMax;
if (camPos.Z()<zgMin) zDistance = zgMin-camPos.Z();
if (camPos.Z()>zgMax) zDistance = camPos.Z()-zgMax;
float dist = sqrt(xDistance*xDistance+zDistance*zDistance);
и
float distX = 0, distZ = 0;
if (cPos.X()<xgMin) distX = xgMin-cPos.X();
if (cPos.X()>xgMax) distX = cPos.X()-xgMax;
if (cPos.Z()<zgMin) distZ = zgMin-cPos.Z();
if (cPos.Z()>zgMax) distZ = cPos.Z()-zgMax;
float dist = sqrt(distX*distX +distZ*distZ);
Мне кажется, что это уже задавали и несколько раз отвечали:
https://stackoverflow.com/info/204177/what-tool-to-find-code-duplicates-in-c-projects
Как обнаружить дублирование кода во время разработки?
Я предлагаю закрыть здесь дубликат.
На самом деле, я думаю, что это более общая проблема поиска, например: Как искать, если вопрос уже задан в StackOverflow?