4D v16.3Guía de declaración |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Guía de declaración
Guía de declaración
Esta sección describe las principales causas de conflictos de tipos en variables, como también las maneras de evitarlos. Los conflictos de tipos simples pueden resumirse en:
El conflicto de tipo más simple es aquel en el que un nombre de variable está designado a dos objetos diferentes. Imagine que en una aplicación, usted escribe: Variable:=5 y que en otra parte, de la misma aplicación, escribe: Variable:=True Esto genera un conflicto de tipo de datos. El problema puede resolverse renombrando una de las variables. Suponga que escribe en una aplicación: Variable:=5 y que en otra parte, en la misma aplicación, escribe: C_BOOLEAN(Variable) Como el compilador primero revisa las directivas, hará la variable de tipo Booleano, pero cuando encuentre: Variable:=5 detectará un conflicto de tipo de datos. Puede resolver el problema renombrando la variable o modificando la directiva de compilación. La utilización de variables de tipos diferentes en una expresión genera inconsistencias. El compilador señala las incompatibilidades. Este es un ejemplo simple: vBool:=True `El compilador deduce que vBoolean es de tipo Booleano Algunas funciones devuelven variables de un tipo muy preciso. La asignación del resultado de una de estas variables a una variable ya declarada de forma diferente provocará un conflicto de tipos si no tiene cuidado. IdentNo:=Request("Número de identificación") `IdentNo es de tipo Texto En este ejemplo, usted genera un conflicto de tipos en la tercera línea. La solución consiste en controlar el comportamiento de la variable. En algunos casos, deberá crear una variable intermedia que utilice un nombre diferente. En otros casos, como este, puede estructurar su método de una forma diferente: IdentNo:=Num(Request("Número de identificación")) `IdentNo es de tipo Real Declarar la misma variable por dos directivas de compilación diferentes constituye una redeclaración. Si escribe en la misma base: C_BOOLEAN(Variable) el compilador detecta el conflicto y reporta un error en el archivo de error. Generalmente, puede resolver el problema renombrando una de las variables. Los conflictos de tipo para las variables locales son idénticos a los conflictos de tipo para las variables proceso o interproceso. La única diferencia es que debe haber consistencia sólo en un método específico. $Temp:="Flores" y luego $Temp:=5 Sin embargo, puede escribir: $Temp:="Flores" en método M1 y: $Temp:=5 en método M2, porque el alcance de las variables locales es el mismo método y no la base completa. Los conflictos sobre un array nunca están relacionados con el tamaño del array. En modo compilado como en modo interpretado, los arrays son administrados dinámicamente. El tamaño de un array puede variar a través de los métodos, y no tiene que declarar un tamaño máximo para un array. Debe seguir las siguientes pautas cuando escribe una base destinada a ser compilada:
Si declara un array como un array Entero, debe permanecer como un array Entero en toda la base. Por ejemplo, nunca podrá contener elementos de tipo Booleano. ARRAY INTEGER(MiArray;5) el compilador no puede identificar el tipo de MiArray. En una base interpretada, puede cambiar el número de dimensiones de un array. Cuando el compilador establece la tabla de símbolos, se manejan de diferente forma los array de una dimensión que los bidimensionales. ARRAY INTEGER(MiArray1;10) Sin embargo, puede escribir en la misma aplicación: ARRAY INTEGER(MiArray1;10) El número de dimensiones en un array no puede cambiarse en una base. Sin embargo, puede cambiar el tamaño de un array. Puede redimensionar un array de un array bidimensional y escribir: ARRAY BOOLEAN(MiArray;5) Nota: un array bidimensional, es de hecho, un conjunto de varios arrays de una dimensión. Para mayor información, consulte la sección . Durante la utilización de comandos como COPY ARRAY, LIST TO ARRAY, ARRAY TO LIST, SELECTION TO ARRAY, SELECTION RANGE TO ARRAY, ARRAY TO SELECTION, o DISTINCT VALUES, puede cambiar, voluntariamente o no, los tipos de elementos, el número de dimensiones, o en una array alfa, la longitud de la cadena. Usted se encontrará entonces en una de las tres situaciones anteriormente mencionadas. El compilador genera un mensaje de error; la corrección necesaria es generalmente bastante obvia. Los ejemplos de declaración implícita de arrays están en la sección . Si quiere compilar una base que utiliza arrays locales (arrays visibles únicamente por los métodos que los crearon), debe declararlos explícitamente en 4D antes de utilizarlos. ARRAY INTEGER($MiArray;10) Las variables creadas en un formulario (como botones, list boxes desplegables, y así sucesivamente) siempre son variables proceso o interproceso. Las siguientes variables de formulario son consideradas por defecto como Reales: Nota: las variables de formulario Regla, Dial y Termómetro siempre son declaradas como Reales, incluso si elige Entero largo como el tipo de botón por defecto en las Preferencias. Para estas variables, el único conflicto de tipo que puede surgir sería si el nombre de una variable fuera idéntico al de otra ubicada en otra parte de la base. En este caso, renombre la segunda variable. Un área de plug-in siempre es un Entero largo. Nunca podrá haber un conflicto de tipo. Las áreas 4D Write Pro son siempre variables de tipo de Objeto. No puede haber ningún conflicto de escritura, a menos que el mismo nombre de variable se utilice en otra parte de la aplicación. Estas variables son de los siguientes tipos: Estas variables están divididas en dos categorías:
Cada list box añade varias variables en los formularios. El tipo por defecto de estas variables depende del tipo de list box:
Cuando utiliza punteros en su base, toma ventaja de una herramienta poderosa y versátil de 4D. El compilador conserva integralmente los beneficios de los punteros. Variable:=5.3 En este caso, su puntero desreferenciado es una variable Real. Al asignarle a esta variable un valor Booleano, se crea un conflicto de tipos. Si necesita utilizar punteros con diferentes propósitos en el mismo método, asegúrese de que sus punteros estén definidos: Variable:=5.3 Un puntero siempre está definido con relación al objeto al cual se refiere. Por esta razón el compilador no puede detectar conflictos de tipos generados por punteros. En caso de un conflicto, no recibirá un mensaje de error mientras esté en la fase de declaración o de compilación. Durante la compilación, el compilador analiza las definiciones de los comandos de los plug-ins utilizados en la base, es decir el número y tipo de parámetros de estos comandos. No hay peligro de confusión a nivel de declaración si sus llamadas son consistentes con la declaración del método. El compilador no duplica estos archivos, pero los analiza para determinar la declaración adecuada de sus rutinas. Ciertos plug-ins, por ejemplo 4D Write, utilizan comandos que llaman implícitamente a comandos 4D. Tomemos el ejemplo de 4D Write. La sintaxis del comando WR ON EVENT es:
Para que el compilador tenga en cuenta estos parámetros, debe asegurarse de que hayan sido declarados, bien sea por la directiva de compilación, o por su uso en el método, suficientemente explícito para poder deducir claramente el tipo. 4D puede utilizarse para crear y trabajar con componentes. Un componente es un conjunto de objetos 4D representando una o varias funcionalidades agrupadas en un archivo de estructura (llamado base principal), que puede instalarse en diferentes bases (llamadas bases huésped). Una base huésped ejecutada en modo interpretado puede utilizar indiferentemente componentes interpretados o compilados. Es posible instalar los componentes interpretados y compilados en la misma base huésped. Por el contrario, una base huésped ejecutada en modo compilado no puede utilizar componentes interpretados. En este caso, sólo pueden utilizarse componentes compilados. Una base huésped interpretada que contiene componentes interpretados puede ser compilada y no llama a los métodos del componente interpretado. Si este no es el caso, aparece una caja de diálogo de alerta cuando la compilación no es posible. Se puede producir un conflicto de nombre cuando un método de proyecto del componente tiene el mismo nombre que un método de proyecto de la base huésped. En este caso, cuando el código se ejecuta en el contexto de la base huésped, se llama al método de la base huésped. Este principio permite "ocultar" un método del componente con un método personalizado (por ejemplo para obtener una funcionalidad diferente). Cuando el código se ejecuta en el contexto del componente, se llama al método del componente. Este enmascaramiento es señalado como una advertencia durante la compilación de la base huésped. Si dos componentes comparten métodos con el mismo nombre, se genera un error en el momento de la compilación de la base host. Para mayor información sobre componentes, consulte el Manual de Diseño. La manipulación de las variables locales sigue todas las reglas que ya han sido enunciadas. Como las otras variables, sus tipos de datos no pueden alterarse durante la ejecución del método. En esta sección, examinamos dos instancias que pueden conducir a conflictos de tipos:
Una variable no puede ser redeclarada. Sin embargo, es posible utilizar un puntero para referirse a variables de diferentes tipos de datos. Hay dos métodos para efectuar esta operación:
$Tamaño:=Size of array($1->) En el método anterior, el tipo de $0 cambia de acuerdo al valor de $1; por lo tanto, no es compatible con el compilador.
$Tamaño:=Size of array($1->) Estas son las principales diferencias entre las dos funciones: El compilador administra el poder y la versatilidad de indirección sobre los parámetros. En modo interpretado, 4D le da toda toda la libertad con los números y los tipos de parámetros. Usted mantiene esta libertad en modo compilado, siempre y cuando no introduzca conflictos de tipos y que no utilice más parámetros de los pasados en el método llamado. Como ejemplo, considere una función que añade valores y devuelve la suma con el formato que se pasa como un parámetro. Cada vez que se llama este método, el número de valores a añadir puede variar. Debemos pasar los valores como parámetros al método y el formato en forma de una cadena de caracteres. El número de valores puede variar de llamado en llamado. Resultado:=MiSuma("##0.00";125,2;33,5;24) En este caso, el método llamado, obtendrá la cadena “182.70”, la cual es la suma de los números, con el formato especificado. Los parámetros de funciones deben pasarse en el orden correcto: primero el formato y luego los valores. Esta es la función MiSuma: $Sum:=0 Esta función puede llamarse de varias formas: Resultado:=MySum("##0.00";125,2;33,5;24) Al igual que con las otras variables locales, no es necesario declarar parámetros genéricos por directivas de compilación. Si es necesario (en casos de ambigüedad o por optimización), se utiliza la siguiente sintaxis: C_LONGINT(${4}) Este comando significa que todos los parámetros a partir del cuarto (incluido) estarán direccionados por indirección y serán de tipo Entero largo. $1, $2 y $3 pueden ser de cualquier tipo. Sin embargo, si utiliza $2 por indirección, el tipo utilizado será de tipo genérico. Será de tipo Entero largo, incluso si para usted era, por ejemplo, de tipo Real. Nota: el compilador utiliza este comando en la fase de declaración. El número en la declaración tiene que ser una constante y no una variable. Algunas variables y constantes de 4D tiene un tipo y una identidad asignada por el compilador. Por lo tanto, no puede crear una nueva variable, método, función o comando de plug-in comando utilizando cualquiera de los nombres de esta variables o constantes. Puede probar sus valores y utilizarlos como lo hace en modo interpretado. Esta es una lista completa de las Variables sistema de 4D con sus tipos.
Cuando crea una columna calculada en un informe, 4D crea automáticamente una variable C1 para la primera, C2 para la segunda, C3... y así sucesivamente. Esto se hace de manera transparente. La lista de constantes predefinidas en 4D se encuentra utilizando el Lista de temas de constantes. Igualmente puede ver las constantes en Explorador, en modo Diseño.
Ver también
Consejos de optimización
|
PROPIEDADES
Producto: 4D
HISTORIA
Modificado: 4D v15 R4 ARTICLE USAGE
Manual de lenguaje 4D ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||