Qualcuno ha qualche strumento o qualche pratica raccomandata su come trovare un pezzo di codice simile ad un altro codice?Come trovare un frammento di codice simile?
Spesso scrivo una funzione o un frammento di codice e ricordo di aver già scritto qualcosa del genere prima, e vorrei riutilizzare l'implementazione precedente, tuttavia l'uso della ricerca in testo semplice non rivela nulla, poiché non ho usato il nomi variabili che sarebbero esattamente gli stessi.
Avere frammenti di codice simili porta a una duplicazione di codice non necessaria, tuttavia con una base di codice estesa è impossibile mantenere tutto il codice in memoria. Esistono strumenti che potrebbero eseguire analisi del codice e frammenti o funzioni contrassegnati che sono "simili" in termini di funzionalità?
considerare i seguenti esempi:
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);
e
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);
Mi sembra che sia già stato chiesto e ha risposto più volte:
https://stackoverflow.com/questions/204177/what-tool-to-find-code-duplicates-in-c-projects
How to detect code duplication during development?
Suggerisco di chiudere come duplicato qui.
In realtà penso che sia un problema di ricerca più generale, come: Come faccio a cercare se la questione è stata già chiesto in StackOverflow?
Domanda correlata - http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous – Oded
possibile duplicato di [Come rilevare la duplicazione del codice durante lo sviluppo?] (Http: //stackoverflow.com/questions/191614/how-to-detect-code-duplication-during-development) – Suma