4D v16.3Consejos de optimización |
||
|
4D v16.3
Consejos de optimización
Consejos de optimización
Es difícil establecer un método definitivo para “programar bien”, pero queremos hacer énfasis en las ventajas de estructurar bien los programas. La capacidad de programar estructuradamente en 4D puede ser de gran ayuda. La compilación de una base bien estructurada puede obtener mejores resultados que en una base mal estructurada. Por ejemplo, si escribe un método genérico para manejar n métodos de objeto, obtendrá resultados de más calidad en modo interpretado y en compilado que en una situación donde n métodos de objeto componen n veces el mismo conjunto de instrucciones. En otras palabras, la calidad de la programación tiene un impacto en la calidad del código compilado. Entre tanto, le podemos ofrecer algunos consejos y trucos para que ahorre tiempo realizando tareas simples y recurrentes. Algunas técnicas de programación pueden hacer que su código no sea fácil de leer tanto para usted como para otra persona en el futuro. Por esta razón, le aconsejamos comentar detalladamente sus métodos. De hecho, mientras que los comentarios excesivos tienden a hacer lenta una base interpretada, no tienen ninguna influencia en el tiempo de ejecución de una base compilada. Las directivas de compilación pueden ayudarle a acelerar su código considerablemente. Cuando declara variables con base en su uso, el compilador utiliza el tipo de datos con el mayor alcance posible para no penalizarlo. Por ejemplo, si no declara la variable definida por la instrucción: Var:= 5, el compilador le dará el tipo Real, incluso si se puede declarar como Entero. Por defecto, el compilador da el tipo Real a las variables numéricas no declaradas por directivas de compilación y si las Propiedades de la base no indican otra cosa. Los cálculos con Reales son más lentos que con Enteros largos. Si sabe que una variable numérica siempre será un entero, es conveniente declararla con las directivas de compilación C_LONGINT. Por ejemplo, es una buena práctica declarar sus contadores de bucles como Enteros. Algunas funciones estándar de 4D devuelven Enteros (ejemplo: Character code, Int...). Si usted asigna el resultado de una estas funciones a una variable no declarada de su base, el compilador le asigna el tipo Real en lugar del tipo Entero. Recuerde declarar estas variables con directivas de compilación siempre que esté seguro de que no se utilizarán en un contexto diferente. Este es un ejemplo simple de una función que devuelve un valor aleatorio dentro de un rango dado: $0:=Mod(Random;($2-$1+1))+$1 Siempre devolverá un entero. Escrito de esta manera, el compilador le dará a $0 el tipo Real en lugar de Entero o Entero largo. Es mejor incluir una directiva de compilación en el método: C_LONGINT($0) y una tercera variable no declarada recibe la suma de las otras dos variables:$var3:=$var1+$var2. El compilador declarará la tercera variable, $var3, como Real. Usted tendrá que declararla explícitamente como Entero largo si quiere que el resultado sea Entero largo. Nota: sea cuidadoso con el modo de cálculo en 4D. En modo compilado, no es el tipo de la variable que recibe el cálculo el que determina el modo de cálculo, sino el tipo de los operandos. C_REAL($var3) $var3 es igual a –2147483648 tanto en modo compilado como interpretado.
C_REAL($var3) Por razones de optimización, el compilador considera el valor 1 como un entero. En modo compilado, $var3 es igual a –2147483648 porque el cálculo se efectúa sobre Enteros largos. En modo interpretado, $var3 es igual a 2147483648 porque el cálculo se efectúa sobre Reales. Los botones son un caso específico de Real que puede declararse como Entero largo. Si quiere probar el valor de un carácter, es más rápido hacer la comparación con su valor Character code en vez de con el carácter mismo. La rutina estándar de comparación de caracteres tiene en cuenta todas las variaciones del carácter, tales como las acentuaciones. El procesamiento de arrays de dos dimensiones se maneja mucho mejor si la segunda dimensión es más larga que la primera. Por ejemplo, un array declarado como: será manejado mejor que un array declarado como: ARRAY INTEGER(Array;1000;5) Cuando necesite efectuar varios cálculos sobre un campo, puede mejorar el desempeño almacenando el valor del campo en una variable y realizando sus cálculos sobre la variable en lugar de sobre el campo. Considere el siguiente método: Case of Este método tomará más tiempo en ejecutarse que si se escribe de esta forma: $Dest:=[Cliente]Dest Como en el caso de los campos, es más rápido trabajar con variables que con punteros sin referencia. Cuando necesite realizar varios cálculos sobre una variable referenciada por un puntero, puede ahorrar tiempo almacenando el puntero sin referencia en una variable. Por ejemplo, suponga que utiliza un puntero, MiPtr, para hacer referencia a un campo o a una variable. Usted quiere realizar un conjunto de pruebas sobre el valor referenciado por MiPtr. Puede escribir: Case of El conjunto de pruebas se realizaría más rápido si se escribiera: Temp:=MiPtr-> Utilice variables locales, siempre que sea posible, para estructurar su código. Utilizar variables locales tiene las siguientes ventajas:
Ver también
Detalles de sintaxis
|
PROPIEDADES
Producto: 4D
HISTORIA
ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |