Saltar al contenido principal
Versión: 20

Variables

Los datos en 4D se almacenan de dos formas fundamentalmente diferentes. Los campos almacenan datos permanentemente en el disco; las variables almacenan datos temporalmente en la memoria.

Cuando define su base, especifique a 4D los nombres y los tipos de campos que desea utilizar. Las variables son muy parecidas, también se les da nombres y tipos diferentes (ver Tipos de datos).

Una vez creada, puede utilizar una variable dondequiera que la necesite en su aplicación. Por ejemplo, podría necesitar almacenar una variable texto en un campo del mismo tipo:

[MyTable]MyField:=MyText

Las variables son objetos del lenguaje; puede crear y utilizar variables que nunca aparecerán en la pantalla. En sus formularios, puede mostrar variables en la pantalla (excepto de los punteros y de los BLOB), introducir datos en ellas e imprimirlas en informes. De este modo, las variables de área introducibles y no introducibles actúan igual que los campos, y los mismos controles integrados están disponibles al crearlos. Las variables de formulario también pueden controlar botones, list boxes, áreas de desplazamiento, botones imagen, etc., o mostrar los resultados de cálculos que no necesitan ser guardados.

Declaración de variables​

Generalmente se crean variables declarándolas. El lenguaje 4D ofrece dos formas de declarar las variables:

  • using the var keyword (recommended, specially if your code uses objects and classes),
  • utilizando uno de los comandos del lenguaje 4D del tema "Compilador" o "Arrays" (sintaxis heredada).

Cuando se declaran las variables, se inicializan con el valor por defecto correspondiente a su tipo, que mantendrán durante la sesión mientras no hayan sido asignadas.

nota

Aunque no es recomendable, puede crear variables simplemente utilizándolas; no es necesario declararlas formalmente. Por ejemplo, para crear una variable que mantenga la fecha actual más 30 días, puede escribir:

MyDate:=Current date+30 //MyDate se crea
// 4D asume que es de tipo fecha
// y asigna la fecha actual más 30 días

Cuando una variable se crea antes de ser declarada, no se inicializa en el paso de declaración.

Utilizando la palabra clave var​

Declaring variables using the var keyword is recommended since this syntax allows you to bind object variables with classes. Using this syntax enhances code editor suggestions and type-ahead features.

To declare a variable of any type with the var keyword, use the following syntax:

var <varName>{; <varName2>;...}{ : <varType>}

Por ejemplo:

var $myText : Text //una variable texto
var myDate1; myDate2 : Date //varias variables fecha
var $myFile : 4D.File //una variable objeto clase archivo
var $myVar //una variable variant

varName es el nombre de la variable, debe cumplir con las reglas 4D sobre identificadores. Esta sintaxis sólo soporta declaraciones de variables locales y de proceso, por lo que excluye variables interproceso y arrays.

varType puede ser:

  • un tipo básico, en cuyo caso la variable contiene un valor del tipo declarado,
  • una referencia de clase (clase 4D o clase usuario), en cuyo caso la variable contiene una referencia a un objeto de la clase definida.

Si se omite varType, se crea una variable de tipo variant.

La siguiente tabla enumera todos los valores varType soportados:

varTypeContenido
TextValor texto
DateValor fecha
TimeValor Hora
BooleanValor booleano
IntegerValor entero largo
RealValor real
PointerValor puntero
PictureValor imagen
BlobValeor Blob escalar
CollectionValor colección
VariantValor variant
ObjectObjeto con clase por defecto (4D.object)
4D.<className>Objeto del nombre de la clase 4D
cs.<className>Objeto del nombre de la clase usuario
cs.<namespace>cs.Objeto del componente <namespace> nombre de la clase

Ejemplos​

  • Para declarar variables básicas locales y de proceso:
var $myText; myText; $vt : Text
var myVar //variant

var $o : Object
//equivalente a:
var $o : 4D.Object
//también equivalente a C_OBJECT($o)
  • Para declarar las variables objeto de la clase 4D:
var $myFolder : 4D.Folder
var $myFile : 4D.File
  • Para declarar las variables objeto de la clase usuario:
var $myClass : cs.MyClass
var $dataclass : cs.Employee
var $entity : cs.EmployeeEntity

Utilizando un C_ directive​

Compatibility Note: This feature is not recommended to declare variables inside methods. It is recommended to use the var keyword.

Las directivas del tema "Compilador" permiten declarar variables de tipos básicos.

Por ejemplo, si se quiere definir una variable de tipo texto, se escribe:

C_TEXT(myText)

A continuación se presentan algunas declaraciones de variables básicas:

C_BLOB(vxMyBlob) // La variable proceso vxMyBlob se declara como una variable de tipo BLOB
C_DATE($vdCurDate) // La variable local $vdCurDate se declara como una variable de tipo Fecha
C_LONGINT(vg1;vg2;vg3) // Las 3 variables de proceso vg1, vg2 y vg3 se declaran como variables de tipo Entero largo
C_OBJECT($vObj) // La variable local $vObj se declara como una variable de tipo Objeto
C_COLLECTION($vCol) // La variable local $vCol se declara como una variable de tipo Colección

Note: Arrays are a particular type of variables (an array is an ordered series of variables of the same type). Arrays are declared with specific commands, such as ARRAY LONGINT(alAnArray;10). For more information, please refer to Arrays.

Asignar los valores​

Los datos pueden introducirse y copiarse en variables y arrays. Los datos pueden introducirse y copiarse en variables y arrays. El operador de asignación también se utiliza para asignar datos a campos.

El operador de asignación es un primer medio para crear una variable e introducir datos en ella. Se escribe el nombre de la variable que se quiere crear a la izquierda del operador de asignación. Por ejemplo:

MyNumber:=3

crea la variable MyNumber y pone el número 3 en ella. Si MyNumber ya existe, entonces toma el valor 3.

Normalmente no se recomienda crear variables sin declarar su tipo.

Por supuesto, las variables no serían muy útiles si no se pudieran obtener valores de ellas. Una vez más, se utiliza el operador de asignación. Si necesita poner el valor de MyNumber en un campo llamado [Products]Size, escribiría MyNumber a la derecha del operador de asignación:

[Products]Size:=MyNumber

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

Los valores se asignan a los elementos del array utilizando llaves ({...}):

atNames{1}:="Richard"

Variables locales, proceso e interproceso​

Puede crear tres tipos de variables: local, proceso e interproceso**. La diferencia entre los tres tipos de elementos es su alcance, o los objetos para los que están disponibles.

Variables locales​

Una variable local, como su nombre indica, es local a un método, accesible sólo dentro del método en el que fue creada y no accesible fuera de ese método. Ser local a un método se conoce formalmente como ser de "alcance local." Las variables locales se utilizan para restringir una variable para que funcione sólo dentro del método.

Es posible que desee utilizar una variable local para:

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

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

Cuando se trabaja en un proyecto de aplicación con muchos métodos y variables, a menudo se encuentra que se necesita utilizar una variable sólo dentro del método en el que se está trabajando. Puede crear y utilizar una variable local en el método sin preocuparse de si ha utilizado el mismo nombre de variable en otro lugar.

Con frecuencia, en una aplicación, se necesitan pequeñas piezas de información del usuario. Con frecuencia, en una aplicación, se necesitan pequeñas piezas de información del usuario. Muestra una caja de diálogo con un mensaje que solicita al usuario una respuesta. Cuando el usuario introduce la respuesta, el comando devuelve la información que el usuario introdujo. Generalmente no es necesario mantener esta información en sus métodos durante mucho tiempo. Esta es una forma típica de utilizar una variable local. Aquí un ejemplo:

$vsID:=Request("Please enter your ID:")
If(OK=1)
QUERY([People];[People]ID =$vsID)
End if

Este método simplemente pide al usuario que introduzca un ID. Pone la respuesta en una variable local, $vsID, y luego busca el ID que el usuario introdujo. Cuando este método termina, la variable local $vsID se borra de la memoria. Este funcionamiento está bien, porque la variable se necesita sólo una vez y sólo en este método.

Nota: los parámetros $1, $2... pasadas a los métodos son variables locales. Para más información, consulte Parámetros.

Variables proceso​

Una variable proceso sólo está disponible dentro de un proceso. Es accesible al método del proceso y a todos los métodos llamados desde el proceso.

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

En modo interpretado, las variables se mantienen dinámicamente; se crean y se borran de la memoria "sobre la marcha". En modo compilado, todos los procesos que se crean (procesos usuario) comparten la misma definición de variables proceso, pero cada proceso tiene una instancia diferente 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 las variables proceso de otro proceso utilizando los comandos GET PROCESS VARIABLE y SET PROCESS VARIABLE. Es una buena práctica de programación restringir el uso de estos comandos a la situación para la que fueron creados en 4D:

  • Comunicación interprocesos en lugares específicos de su código
  • Gestión de arrastrar y soltar interproceso
  • En Cliente/Servidor, la comunicación entre los procesos en las máquinas cliente y los procedimientos almacenados ejecutados en las máquinas servidoras

Para más información, consulte el capítulo Procesos y la descripción de estos comandos.

Variables interproceso​

Obsoleto

No se recomienda el uso de variables interproceso, ya que no están disponibles para los procesos apropiativos y tienden a hacer que el código sea menos mantenible.

Las variables interproceso están disponibles en todo el proyecto y son compartidas por todos los procesos cooperativos. Se utilizan principalmente para compartir información entre procesos.

El nombre de una variable interproceso siempre comienza con los símbolos <> — un signo "menor que" seguido de un signo "mayor que"— seguido de 31 caracteres.

En modo cliente/servidor, cada máquina (cliente y servidor) comparten la misma definición de las variables interproceso, pero cada máquina tiene una instancia diferente para cada variable.

Variables del sistema​

El lenguaje 4D maneja varias variables sistema, las cuales le permiten controlar la ejecución de diferentes operaciones. Puedes probar sus valores y usarlos como cualquier variable. Todas las variables del sistema son variables proceso.

Las variables del sistema son utilizadas por los comandos 4D. Consulte el párrafo "Variables del sistema y conjuntos" en la descripción de un comando para averiguar si afecta a una variable del sistema.

Nombre de la variable del sistemaTipoDescripción
OKIntegerNormalmente se establece en 1 después de que un comando haya mostrado una caja de diálogo y el usuario haya hecho clic en el botón Aceptar, y en 0 si hizo clic en Cancelar. Algunos comandos también modifican el valor de la variable del sistema OK cuando se ejecuta una operación con éxito.
DocumentTextContiene el "nombre largo" (ruta completa+nombre) del último archivo abierto o creado utilizando comandos como Open document o SELECT LOG FILE.
FldDelimit, RecDelimitIntegerContienen los códigos de caracteres que se utilizarán respectivamente como separador de campos (por defecto es Tab (9)) y separador de registros (por defecto es retorno de carro (13)) al importar o exportar texto. Para utilizar un separador diferente, asigne un nuevo valor a la variable del sistema.
Error, Error method, Error line, Error formulaText, LongintUtilizado en un método de captura de errores instalado por el comando ON ERR CALL. Utilizado en un método de captura de errores instalado por el comando ON ERR CALL.
MouseDownIntegerUtilizado en un método instalado por el comando ON EVENT CALL. Toma el valor 1 cuando se presiona el botón del ratón, de lo contrario 0.
MouseX, MouseYIntegerUtilizado en un método instalado por el comando ON EVENT CALL.
  • En un evento MouseDown=1, MouseX y MouseY se establecen respectivamente en las coordenadas verticales y horizontales del clic. Ambos valores se expresan en píxeles y utilizan el sistema de coordenadas local de la ventana.
  • En el caso de un campo imagen o variable, MouseX y MouseY devuelven las coordenadas locales de un clic de ratón en los eventos de formulario On Clicked, On Double Clicked y On Mouse Up. Las coordenadas locales del cursor del ratón también se retornan en los eventos formulario On Mouse Enter y On Mouse Move. Para obtener más información, consulte la sección Coordenadas del ratón en una imagen.
  • KeyCodeIntegerUtilizado en un método instalado por el comando ON EVENT CALL. Define el código de carácter de la tecla que se acaba de presionar. Si la tecla es una tecla de función, KeyCode se establece como un código especial.
    ModifiersIntegerUtilizado en un método instalado por el comando ON EVENT CALL. Establece las teclas modificadoras del teclado (Ctrl/Command, Alt/Option, Shift, Caps Lock).
    MouseProcIntegerUtilizado en un método instalado por el comando ON EVENT CALL. Define el número de proceso en el que tuvo lugar el último evento
    nota

    Por lo tanto, no se puede crear una variable, método o función usando ninguno de estos nombres de variables.