У кого-нибудь есть какой-нибудь инструмент или рекомендуемая практика, как найти кусок кода, который похож на какой-то другой код?
Часто я пишу функцию или фрагмент кода, и я помню, что уже писал что-то подобное раньше, и я хотел бы повторно использовать предыдущую реализацию, однако использование простого текстового поиска ничего не показывает, так как я не использовал переменную имена, которые были бы точно такими же.
Наличие похожих фрагментов кода приводит к ненужному дублированию кода, однако при большой кодовой базе невозможно сохранить весь код в памяти. Существуют ли какие-либо инструменты, которые могли бы выполнить некоторый анализ кода и отмеченных фрагментов или функций, которые «похожи» по функциональности?
Рассмотрим следующие примеры:
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/questions/204177/what-tool-to-find-code-duplicates-in-c-projects
Как обнаружить дублирование кода во время разработки?
Я предлагаю закрыть здесь как дубликат.
На самом деле, я думаю, что это более общая проблема поиска, например: Как искать, если вопрос уже задавался в StackOverflow?