"Cosa" de Negro
febrero 20, 2005
 
Optimización III - ADEL, AINS, operador IN
Prosiguiendo con nuestra tarea de escribir código más óptimo, voy a nombrar algunas de las funcionalidades más útiles disponibles en xHarbour.

Función ADEL

ADEL( aArray, nPos, lAutoSize )

El parámetro lAutoSize en .T., hace la llamada a ASIZE() internamente, reduciendo la cantidad de código ejecutado.

Función AINS

AINS( aArray, nPos, xDato, lAutoSize )

El parámetro xDato asigna el dato en la posición nPos, evitando tener que hacerlo posteriormente.
El parámetro lAutoSize en .T., hace la llamada a ASIZE() internamente.
Con solo dos parámetros extras en la función se reduce la ejecución de mucho código.

Operador IN o $

Todos seguramente conocen el operador $, que sirve para saber si existe una cadena de caracteres dentro de otra cadena de caracteres.

El operador IN cumple la misma función, de hecho son sinónimos.

Pero se ha extendido el uso de estos operadores para usarlos con arrays y hashes.

La siguiente expresión

IF ASCAN( aArray, xDato ) > 0

se puede reducir a:

IF xDato IN aArray

Próximamente voy a comentar una extensión que tengo hecha asociada a este operador para recuperar la posición donde se encontró el dato.

Los animo a comparar el PCODE generado por las llamadas originales a las funciones con las llamadas optimizadas.

////////////////////////////////////////////////////////////
Function Main()
Local aArray := ARRAY( 10 )

ADEL( aArray, 2 )
ASIZE( aArray, LEN( aArray ) - 1 )

ASIZE( aArray, LEN( aArray ) + 1 )
AINS( aArray, 5 )
aArray[ 5 ] := 10

IF ASCAN( aArray, 10 ) > 0
? "Lo encontre"
ENDIF
RETURN

////////////////////////////////////////////////////////////
Function Main()
Local aArray := ARRAY( 10 )

ADEL( aArray, 2, .T. )

AINS( aArray, 5, 10, .T. )

IF 10 IN aArray
? "Lo encontre"
ENDIF
RETURN

Comments:
Walter, sigue hombre, que no decaiga esta buena informacion.

La verdad siempre he sido reacio a implememtar,
'más alla' de lo que fue el lenguaje clipper.

Será hora de ir pensando si merece la pena perderse
esto o no....

Saludos
 
Rafa:

Como siempre digo, para optimizar hay que hacer análisis.

Asi que dependerá de los resultados ésta que arroje para decidir si merece la pena usar estas funciones.

Esto motiva la necesidad de tener herramientas para poder hacer estos análisis.

Sin estas herramientas será más dificil conocer los cuellos de botella del programa o las funciones más usadas, las cuales serán las primeras a tratar de optimizar.

xHarbour cuenta con herramientas para hacer este tipo de análisis, asi que próximamente haré una nota sobre ellas.
 
Walter: ante todo enhorabuena por el blog y gracias por compartir tus conocimientos. Espero ese post sobre las herramientas de xHarbour para hacer análisis de código.
Saludos,
 
Publicar un comentario

<< Home

Powered by Blogger