Que Muestra Este Ejemplo
Las dos funciones anteriores calculan el mismo resultado usando enfoques diferentes. El original usa un bucle for imperativo con una variable let mutable. La versión modificada usa Array.reduce con una ligadura const. El diff resalta exactamente que cambio durante esta refactorización.
La vista lado a lado deja claro que líneas se eliminaron de la izquierda y cuales se agregaron a la derecha. La firma de la función y la declaración return no cambiaron. Las tres líneas centrales del original se convierten en cuatro líneas en la versión modificada.
Como Funcionan los Algoritmos Diff
Algoritmo de Myers
El algoritmo de Myers es la base de la mayoría de las herramientas diff, incluyendo el comando Unix diff original. Modela la comparación como un problema de script de edición más corto: dadas dos secuencias de líneas, encuentra el número mínimo de inserciones y eliminaciones para transformar la primera en la segunda.
El algoritmo trabaja sobre una grafica donde cada camino de la esquina superior izquierda a la inferior derecha representa una posible secuencia de edición. Moverse en diagonal significa que las líneas coinciden (sin edición necesaria). Moverse a la derecha significa una inserción. Moverse hacia abajo significa una eliminación. Myers encuentra el camino más corto en esta grafica, que corresponde a la menor cantidad de ediciones.
Patience diff
Patience diff es un algoritmo alternativo. Primero identifica las líneas que aparecen exactamente una vez en cada archivo (líneas únicas), las usa como puntos de anclaje, y luego se repite en las regiones entre los anclajes. Esto produce diffs más limpios cuando el código se ha reestructurado significativamente porque las líneas únicas actuan como marcadores estructurales. Git usa patience diff por defecto cuando ejecutas git diff --patience.
Resaltado a nivel de carácter
Despues de encontrar que líneas cambiaron, una herramienta diff puede aplicar el mismo algoritmo dentro de cada línea modificada a nivel de carácter. Esto te dice no solo que una línea cambio, sino exactamente que caracteres dentro de ella son diferentes.