miércoles, 13 de mayo de 2015

Quitando elementos de un array

Desde los inicios de Clipper, para quitar un elemento de un array utilizabamos la función aDel(), cuyo uso tenía un efecto un poco extraño: no disminuía el tamaño del array, sino que desplazaba una posición todos los elementos posteriores al eliminado. Esto obliga a utilizar la función aSize( ) para rectificar la situación.

Gracias a la experiencia y lucidez de los desarrolladores de Harbour esto ya es un inconveniente del que nos podemos olvidar. Ahora la función aDel tiene un tercer parámetro, lShink, que hace la tarea obvia de disminuir el tamaño.

aDel( aArray, nElement <, lShrink> )

Por defecto lShrink es .F., por lo que sigue siendo compatible con el código existente.

LOCAL aTest:= { 1, 2, 3, 4, 5 }

? Len( aTest ) // -> 5

aDel( aTest, 3 )
? Len( aTest ) // -> 5


aDel( aTest, 3, .T.  )
? Len( aTest ) // -> 4 !

Tantas veces hemos tenido que ajustar el array debido al comportamiento particular de aDel() que no podía dejarlo pasar.