4D v16.3

Variables

Inicio

 
4D v16.3
Variables

Variables  


 

 

Los datos en 4D pueden almacenarse de dos maneras diferentes. Los campos almacenan los datos en el disco, de manera permanente; las variables almacenan los datos en memoria, de manera temporal.

Cuando define su base 4D, usted especifica los nombres y tipos de campos que quiere utilizar. Es prácticamente lo mismo para las variables, usted también les da diferentes nombres y tipos.

Los siguientes tipos de variables corresponden a cada uno de los tipos de datos:

  • Alfa(*) o texto: cadena alfanumérica de hasta 2GB de texto
  • Entero: número entero entre -32768 y 32767
  • Entero largo: número entero entre -2^31 y (2^31)-1
  • Real: número real entre ±1.7y±308 (13 cifras significativas)
  • Fecha: fecha entre 1/1/100 y 31/12/32767
  • Time: hora entre 00:00:00 y 596000:00:00 (segundos desde la media noche)
  • Booleano: Verdadero o Falso
  • Imagen: toda imagen Windows o Macintosh
  • Objeto: conjunto de pares "propiedad/valor" estructurados en un formato de tipo JSON
  • Colección: lista ordenada de valores de diferentes tipos
  • BLOB (Objeto Binario Largo): Series de bytes hasta de 2 GB de tamaño
  • Puntero: un puntero hacia una tabla, campo, variable, Array, o elemento de Array

(*) En modo Unicode, los tipos de variable Alfa y Texto son idénticos. En modo no Unicode (modo compatibilidad), un Alfa es una cadena alfanumérica fija de hasta 255 caracteres.

Puede visualizar las variables (excepto punteros y BLOB) en la pantalla, introducir datos en ellas e imprimirlas en informes. De estas formas, las variables editables y no editables se comportan como campos, y los mismos controles integrados están disponibles cuando las crea:

  • Formatos de salida
  • Validación de datos, tales como filtros de entrada y valores por defecto
  • Filtros de caracteres
  • Listas de selección (listas jerárquicas)
  • Valores editables y no editables

Las variables también pueden servir para:

  • controlar botones (botones, casillas de selección, botones radio, botones 3D, etc.)
  • controlar termómetros, reglas y dials
  • controlar los list box, las áreas de desplazamiento, los menús pop-up y las listas desplegables
  • controlar listas y menús jerárquicos
  • controlar las rejillas de botones, pestañas, botones de imagen, etc.
  • visualizar los resultados de cálculos que no necesitan guardarse.

Puede crear variables simplemente utilizándolas; no necesita definirlas formalmente como lo hace con los campos. Por ejemplo, si quiere crear una variable que contenga la fecha actual más 30 días, sólo tiene que escribir:

 MiFecha:=Current date+30

4D crea MiFecha y contiene la fecha que usted necesita. La línea de código se lee “MiFecha es igual a la fecha actual más 30 días.” Puede utilizar MiFecha cada vez que la necesite en su base. Por ejemplo, podría necesitar guardar los datos de la variable en un campo del mismo tipo:

 [MiTabla]MiCampo:=MiFecha

Sin embargo, generalmente es recomendable definir explícitamente el tipo de una variable. Para mayor información sobre la declaración de variables en una base, consulte la sección .

Puede dar valores a las variables y recuperarlos. Dar un valor a una variable se llama asignar un valor a una variable y se hace con el operador de asignación (:=). El operador de asignación también se utiliza para asignar valores a los campos.

El operador de asignación es el primer medio para crear una variable y darle un valor. Usted escribe el nombre de la variable que quiere crear al lado izquierdo del operador de asignación. Por ejemplo:

 MiNúmero:=3

crea la variable MiNúmero y coloca el número 3 en ella. Si MiNúmero ya existe, sólo se coloca el número 3 en la variable.

Desde luego, las variables no serían muy útiles si no pudiera recuperar los valores que contienen. Una vez más, utilice el operador de asignación. Si necesita colocar el valor de MiNúmero en un campo llamado [Productos]Tamaño, basta con escribir MiNúmero a la derecha del operador de asignación:

 [Productos]Tamaño:=MiNúmero

En este caso, [Productos]Tamaño sería igual a 3. Este ejemplo es bastante sencillo, pero ilustra la forma fundamental en que los datos se transfieren de un lugar a otro utilizando el lenguaje.

Importante: no confunda el operador de asignación (:=) con el operador de comparación, igual (=). La asignación y la comparación son operaciones diferentes. Para mayor información sobre operadores de comparación, vea la sección Operadores.

Puede crear tres tipos de variables: variables locales, variables proceso, y variables interproceso. La diferencia entre los tres tipos de variables es su alcance, o los objetos para los cuales están disponibles.

Una variables local, como su nombre lo indica, es local a un método, accesible sólo dentro del método en el cual fue creada e inaccesible fuera de ese método. Una variable local a un método era llamada anteriormente “local en alcance.” Las variables locales se utilizan para restringir una variable de manera que funciona sólo dentro del método.

Podría querer utilizar una variable local para:

  • Evitar conflictos de nombres con otras variables
  • Utilizar temporalmente los valores
  • Reducir el número de variables proceso

El nombre de una variable local siempre comienza con el signo dólar ($) y puede contener hasta 31 caracteres adicionales. Si introduce un nombre más largo, 4D lo trunca a la longitud apropiada.

Cuando trabaja en una base con muchos métodos y variables, con frecuencia se encuentra con que necesita utilizar una variable sólo dentro del método en el que está trabajando. Puede crear y utilizar una variable local en el método sin preocuparse por la existencia de otra variable con el mismo nombre en otro método.

Con frecuencia, en una base de datos, el usuario necesita información puntual. El comando Request puede obtener esta información. Muestra una caja de diálogo con un mensaje que le pide al usuario responder. Cuando el usuario introduce la respuesta, el comando devuelve la información que el usuario introdujo. Generalmente no es necesario conservar esta información en sus métodos por mucho tiempo. Esta es una forma típica de utilizar una variable local. Este es un ejemplo:

 $vsID:=Request("Por favor introduzca su número de identificación ID:")
 If(OK=1)
    QUERY([Personas];[Personas]ID=$vsID)
 End if
Este método simplemente le pide al usuario introducir un número de identificación. La respuesta está ubicada en una variable local, $vsID, y luego busca el número de identificación que el usuario introdujo. Cuando el método termina, la variable local $vsID se borra de la memoria. Este funcionamiento está bien, porque la variable sólo se necesita una vez y sólo en este método.

Una variable proceso está disponible sólo dentro de un proceso. Es accesible en el método de proceso y en cualquier otro método llamado dentro del proceso.

Una variable proceso no tiene un prefijo antes de su nombre y puede tener hasta 31 caracteres.

En modo interpretado, las variables se mantienen dinámicamente, son creadas y borradas de la memoria “rápidamente.” En modo compilado, todos los procesos que usted crea (procesos usuario) comparten la misma definición de variables proceso, pero cada proceso tiene su propia instancia para cada variable. Por ejemplo, la variable miVar es una variable en el proceso P_1 y otra en el proceso P_2.

Un proceso puede leer y escribir variables proceso de otros procesos utilizando los comandos GET PROCESS VARIABLE y SET PROCESS VARIABLE. Recomendamos restringir el uso de estos comandos a las situaciones para los cuales fueron creados en 4D:

  • Comunicación interprocesos en lugares específicos en su código
  • Gestión de interprocesos arrastrar y soltar
  • En cliente/servidor, comunicación entre los procesos en equipos cliente y los procesos guardados en ejecutados en el servidor.

Para mayor información, consulte la sección Procesos y la descripción de estos comandos.

Las variables interproceso están disponibles en toda la base y durante todos los procesos. Principalmente se utilizan para compartir información entre procesos.

El nombre de una variable interproceso siempre comienza con el símbolo (<>), un signo “menor que” seguido por un signo “mayor que”, seguido por hasta 31 caracteres.

Nota: esta sintaxis puede utilizarse en Windows y Macintosh. Además, en Macintosh únicamente, puede utilizar el símbolo diamante (Opción-Mayús-V en teclado en castellano).

En cliente/servidor, cada equipo (equipos cliente y servidor) comparten la misma definición de variables interproceso, pero cada equipo tiene una instancia diferente para cada variable.

En el editor de formularios, cada objeto activo - botón, botón radio, casilla de selección, área de desplazamiento, termómetro, etc. - está identificado por un nombre de objeto y se asocia automáticamente a una variable (o una expresión). Por defecto, la variable no define la creación del objeto: será creada dinámicamente al cargar el formulario (ver abajo). Puede, si lo desea, nombrar la variable en la lista de propiedades con el fin de crearla. Por ejemplo, si crea un botón llamado MiBoton, también se crea una variable llamada MiVarBoton (también puede utilizar el mismo nombre que el objeto).

Las variables de objeto de formulario le permiten controlar y monitorear los objetos. Por ejemplo, cuando se hace clic en un botón, su variable toma el valor 1; de lo contrario está en 0. La variable asociada a un termómetro o dial le permite leer y cambiar los valores actuales. Por ejemplo, si arrastra un termómetro a un nuevo valor, el valor de la variable cambia para reflejar el nuevo valor. De la misma forma, si un método cambia el valor de la variable, el termómetro se dibuja nuevamente para mostrar el nuevo valor.

Para mayor información sobre variables y formularios, consulte el Manual de Diseño 4D y la sección Eventos de formulario.

Puede dejar a 4D crear dinámicamente variables asociadas a sus objetos de formulario (botones, variables editables, casillas de selección, etc.) y de acuerdo a sus necesidades. Para hacerlo, simplemente deje vacío el campo "Nombre de la variable" en la Lista de propiedades para el objeto:

 

Cuando no se le da nombre a una variable, al cargar el formulario, 4D crea una nueva variable para el objeto, con un nombre calculado que es único en el espacio de las variables proceso del intérprete (lo cual significa que este mecanismo puede utilizarse incluso en modo compilado). Esta variable temporal se destruirá cuando se cierre el formulario.

Para que este principio funcione en modo compilado, es imperativo que las variables dinámicas se definan explícitamente. Hay dos formas de hacer esto:

  • definir el tipo vía el menú "Tipo de variable" de la lista de propiedades.
    Nota: cuando se le da nombre a la variable, el menú "Tipo de variable" no define en realidad la variable pero permite la actualización de las opciones de la lista de propiedades (excepto para las variables imagen). Para definir una variable con nombre, es necesario utilizar los comandos del tema Compilador.
  • puede utilizar un código de utilización específico durante la carga del formulario, utilizando por ejemplo el comando VARIABLE TO VARIABLE:
     If(Form event=On Load)
        C_TEXT($init)
        $Ptr_object:=OBJECT Get pointer(Object named;"Comentarios")
        $init:=""
        VARIABLE TO VARIABLE(Current process;$Ptr_object->;$init)
     End if

Nota: si define una variable dinámica, seleccione el valor Ninguno en el menú "Tipo de variable" y no utilice código de inicialización, un error de digitación será devuelto por el compilador.

En el código 4D, las variables dinámicas son accesibles vía un puntero obtenido con el comando OBJECT Get pointer. Por ejemplo:

  // asignar la hora 12:00:00 a la variable del objeto "tstart"
 $p :=OBJECT Get pointer(Object named;"tstart")
 $p->:=?12:00:00?

Hay dos ventajas con este mecanismo:
  • Permite el desarrollo de componentes de tipo "subformulario" que pueden ser utilizados varias veces en un mismo formulario local. Tomemos como ejemplo el caso de un subformulario datepicker insertado dos veces en un formulario local para definir una fecha de inicio y una fecha final. Este subformulario utilizará objetos para la selección de la fecha del mes y el año. Será necesario para que estos objetos trabajen con las variables diferentes para la fecha de inicio y la fecha final. Dejar que 4D cree su variable con un nombre único es una forma de resolver esta dificultad.
  • Permite limitar el uso de la memoria. De hecho, los objetos de formulario sólo trabajan con variables proceso o inter proceso. O en modo compilado, una instancia de cada variable proceso se crea en todos los procesos, incluyendo los procesos del servidor. Esta instancia consume memoria, incluso si el formulario no está siendo utilizado durante la sesión. Por lo tanto, permitir que 4D cree dinámicamente las variables al cargar los formularios permite economizar memoria.

Nota: cuando no hay nombre de variable, el nombre del objeto se muestra entre comillas en el editor de formularios (cuando el objeto muestra por defecto un nombre de variable).

4D mantiene un número de variables llamadas variables de sistema. Estas variables le permiten controlar muchas operaciones. Todas las variables sistema son variables de proceso, disponibles al interior de un solo proceso.

La variable de sistema mas importante es la variable sistema OK. Como su nombre lo indica, esta variable le dice si todo está bien en un proceso en particular. ¿Se guardó el registro? ¿Se completó la operación de importación? ¿El usuario hizo clic en el botón OK? La variable sistema OK toma el valor 1 cuando una tarea se completa correctamente, y 0 cuando ocurre lo contrario.

Para mayor información sobre variables sistema, consulte la sección Variables de sistema.



Ver también 

Arrays
Condiciones y bucles
Constantes
Convenciones
Métodos
Operadores
Punteros
Tipos de datos

 
PROPIEDADES 

Producto: 4D
Tema: Presentación del lenguaje

 
HISTORIA 

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)