Confidencial de Windows: La evolución de la ordenación

El desarrollo de algoritmos en el Explorador de Windows de ordenación tiene una larga historia enredada ligeramente.

Raymond Chen

Explorador de Windows comenzó con un algoritmo de ordenación muy simple. Acaba de ordenar los nombres de archivo de acuerdo con la función "lstrcmpi". Esto lleva a cabo una comparación entre mayúsculas y minúsculas, específicos de la configuración regional. Tenga en cuenta que incluso esta función de comparación fue bastante complicada en el momento. Por ejemplo, dio un tratamiento especial a guiones y apóstrofes.

Como resultado, cuando Windows 95 se ordenan los nombres de archivo para su presentación en el Explorador de Windows, se pondría a file139 antes de file20. Esto es perfectamente lógico desde el punto de vista de un programador equipo. También es completamente contraria a seres humanos normales, así que demuestren que los programadores no son seres humanos normales.

En Windows XP, Microsoft ha actualizado el algoritmo de ordenación de explorador de Windows para ser más en consonancia con lo que esperan los seres humanos normales. Dígitos en nombres de archivo tratan como números en lugar de secuencias de caracteres. Aunque esto mejora la ordenación para la mayoría de las personas, hay casos donde se produjo este cambio en algunas sorpresas.

Un ejemplo que se repiten con frecuencia fue nombres de archivo que contiene los valores hexadecimales. En la nueva basada en el número de ordenación, el Explorador de Windows supone que un archivo denominado "1040A" se debe ordenar un poco después de "1040" y constituía un archivo llamado "103F2". Si por cualquier razón la costumbre de ver las carpetas completos de los archivos cuyos nombres son valores hexadecimales, puede establecer la directiva "Desactivar ordenación numérica en el Explorador de Windows". Esta directiva cambia la ordenación back a como era en las versiones de Windows anteriores a Windows XP, a saber, carácter por carácter.

Puntos y espacios

En Windows Vista, había un pequeño tweak realizado en el algoritmo de comparación, porque períodos servir doble tarea. Son caracteres tradicionales por día, pero también sirven como marcadores de extensión de archivo por la noche. Como resultado, un archivo denominado archivo 1.txt terminó intuitivamente se clasifican después archivo.txt porque el período fue se compara con el espacio y perder.

Microsoft agrega una nueva regla para el algoritmo de ordenación en Windows Vista para que períodos se tratan como ordenación antes de espacios en lugar de después de ellos. Si no le gusta esta subregla, puede deshabilitar estableciendo NoDotBreakInLogicalCompare, pero sólo en Windows Vista. El valor no tiene ningún efecto en Windows 7.

Hay menos extraño, otro caso en el que ordenar carácter por carácter puede ser preferible: si tienen nombres con números de punto flotante en ellos. El algoritmo de ordenación número pondría "1,5" delante de "1,25". Esto es correcto si "1,5" y "1,25" hacen referencia a una jerarquía numerada, como, por ejemplo, una sección de código legal. Título 1, capítulo 5 sería anterior a título 1, capítulo 25.

Por otro lado, si "1,5" y "1,25" hacen referencia a las dimensiones de una parte de la máquina en centímetros, a continuación, se esperaría "1,25" para preceder a "1,5". Porque el Explorador de Windows no tiene suficiente contexto para saber si el número de punto de cualquier cadena concreta de dígitos después de un punto decimal es un número jerárquico o flotante, necesita su ayuda.

Se introdujo un cambio más sutil a algoritmos de ordenación en Windows 7. Un cliente se observó que si tenía dos archivos, con la etiqueta algo como file1.txt, file2.txt, los archivos aparecieron en ese orden si ordena la carpeta por tipo, que es el comportamiento esperado.

Si hace clic en el encabezado de tipo una segunda vez para invertir el orden, las versiones anteriores de Windows seguirá colocar file1.txt por delante de archivo2.txt. Sin embargo, el archivo conmutadores lugares en Windows 7, con archivo2.txt procedentes de file1.txt. El cliente se ha confundido por este cambio de comportamiento porque espera "razonable".

La columna tipo comprende que es común para muchos elementos a tener el mismo tipo, por lo que indica que los lazos deben desglosarse por el nombre del elemento. Además de realizar la ordenación por tipo un poco más coherente, también significa que al invertir el orden de clasificación, los elementos dentro de cada tipo también inviertan orden. Se trata de un comportamiento razonable para muchos usuarios, porque esperan que alternar una columna se invertirá el conjunto de elementos.

Por tanto la próxima vez que ejecute a una ordenación, recuerde que al ordenar sonidos fáciles y sencillos, hay muchas cosas en segundo plano...

Raymond Chen’s

Raymond Chendel El antiguo nuevo cosa, y libro del mismo título (Addison-Wesley, 2007) tratan con la historia de Windows, pollos metales de gigantes y programación de Win32.

Contenido relacionado