|
|
|
|
- Presentación
- Asignación simple: =
- Asignación múltiple
- Asignación por copia: <=
- Asignación por copia en el arrays
- Copia homónima
- Asignación tomando como referencia: ...y que no se puede hacer nada...
- Observaciones
Operadores de asignación
Disponible solo con este tipo de conexión
Hay varios operadores de asignación disponibles: La asignación simple se utiliza entre todos los tipos simples (enteros, reales, cadenas, etc.) para copiar el valor de una variable en otra. Su modo de funcionamiento cambia cuando se utiliza en tipos complejos.
| | Tipo de variables | Efecto |
---|
Tipos simples (integer, real, string, etc.) | Se copia el valor de la variable. | Arrays | El array de destino es una referencia al array de origen. | Associative arrays | Se copia el contenido del array. | Queue | Se copia el contenido de la cola. | Stack | Se copia el contenido de la pila. | List | Se copia el contenido de la lista. | Object = Dynamic object | Los miembros del objeto dinámico se copian a los miembros del nuevo objeto. | Object = Object | Los miembros del objeto de origen se copian a los miembros del objeto de destino. | Dynamic object = Dynamic object | El objeto dinámico de destino es una referencia al objeto dinámico de origen. | Dynamic object = Object | El objeto dinámico de destino es una referencia al objeto de origen. | Structure = Dynamic structure | Se copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran. | Structure = Structure | Se copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran. | Dynamic structure = Dynamic structure | La estructura dinámica de destino es una referencia a la estructura dinámica de origen. | Dynamic structure = Structure | La estructura dinámica de destino es una referencia a la estructura de origen. | Advanced type = Advanced type | Se copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes. | Advanced type = Dynamic advanced type | Se copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes. | Dynamic advanced type = Advanced type | La variable avanzada dinámica de destino es una referencia a la variable avanzada de origen. | Dynamic advanced type = Dynamic advanced type | La variable avanzada dinámica de destino es una referencia a la variable avanzada dinámica de origen. |
Asignación múltiple El '=también puede utilizarse para asignar varias variables en una sola línea de código. Se utiliza la siguiente sintaxis: ( <Variable 1>, <Variable 2>, ... <Variable N> ) = ( <Value 1>, <Value 2>, ... <Value M> ) donde: - N representa el número de variables declaradas.
- M representa el número de valores a asignar.
Observaciones: - Las expresiones a la derecha del signo '=' se evalúan de izquierda a derecha.
- A continuación, las operaciones de asignación de variables a la izquierda del signo se realizan de izquierda a derecha.
- No hay dependencias entre las expresiones de la derecha y las de la izquierda.. Por otro lado, puede haber una dependencia entre las variables de la izquierda.
- Si el número de variables es menor que el número de valores (N menos que M), se producirá un error de compilación.
- Si el número de variables es mayor que el número de valores (N mayor o igual a M), sólo se asignarán las primeras variables.
- Para asignar el mismo valor a todas las variables, basta con utilizar la siguiente sintaxis:
( <Variable 1>, <Variable 2>, ... <Variable N> ) = <Value> Por ejemplo:
Ejemplos: (x, y, z) = (5, 8, 12) // x is set to 5, y is set to 8, z is set to 12 (x, y, z) = (25, 38) // x is set to 25, y is set to 38, z is not assigned (x, , z) = (14, 87) // x is set to 14, y is not assigned, z is set to 87 (t[Subscript1()], t[Subscript2()]) = (Calc1(), calc2()) // The execution order of procedures is as follows: // Calc1() // Calc2() // Subscript1() // Subscript2() // then t[Subscript1()] is assigned the value of Calc1() // then t[Subscript2()] is assigned the value of Calc2() (i, t[i]) = (1, "ABC") // First assigns 1 to i // Then assigns "ABC" in t to the subscript i
La asignación por copia siempre fuerza la copia del elemento fuente en el elemento de destino. Se asigna una nueva zona de memoria para almacenar el valor copiado.. Asignación por copia en el arrays El operador <= puede ser utilizado en el arrays. Estos arrays pueden ser de diferentes tipos. La asignación está usando las conversiones implícitas de WLanguage (como el operador = haría =). Ejemplo: // Declare two arrays of same size and different types (integer and boolean) arrIntegers is array of 3 by 2 int arrBooleans is array of 3 by 2 booleans // Fill the array of integers arrIntegers[1,1] = -6 arrIntegers[1,2] = 9 arrIntegers[2,1] = 0 // Copy the array of integers into the array of booleans arrBooleans <= arrIntegers // Traces of array of booleans // (Reminder: all the numbers other than zero are "True" in boolean logic) Trace(arrBooleeans[1,1]) // Displays 1 Trace(arrBooleeans[1,2]) // Displays 1 Trace(arrBooleeans[2,1]) // Displays 0 Trace(arrBooleeans[2,2]) // Displays 0
Copia homónima El mecanismo de la copia homónima utiliza el método <= para transferir los datos de un elemento estructurado a otro elemento estructurado. Durante la copia, los miembros con el mismo nombre se copian automáticamente del elemento estructurado de origen al elemento estructurado de destino.. Las conversiones de tipos se realizarán automáticamente. Esto le permite: - transferir el contenido de los miembros de la estructura a los elementos de un archivo HFSQL,
- transferir los miembros de tipo avanzado (Email por ejemplo) a los miembros de una clase.
Se pueden manejar los siguientes tipos estructurados: - estructuras,
- clases,
- tipos avanzados,
- Archivos HyperFileSQL,
- consultas,
- fuentes de datos.
Ejemplo: Copiar clases // Declare the classes Class_1 is Class common is int member_1 is int END
Class_2 is Class common is int member_2 is int END
// Assignment o1 is Class_1 o1.common = 1 o1.member_1 = 1
o2 is Class_2 o2.common = 2 o2.member_2 = 2
// Copy o1 <= o2
// Result // o1.common = 2 // o1.member_1 = 1
Observaciones: - El <= puede ser reemplazado por el operador = cuando el modo de funcionamiento no presenta ninguna ambigüedad.
- Para las estructuras y clases, cada miembro puede ir seguido de un atributo "Mapping".. Este atributo se utiliza para especificar el nombre del miembro que debe ser "asignado" al miembro de la estructura o al miembro de la clase..
Ejemplo:
// Declare the classes Class_Simple_1 is Class common is int member_1 is int END
Class_Mapping_1 is Class nCommon is int, mapping = "common" member_1 is int, mapping = "" END
// Assignment o1 is Class_Mapping_1 o1.nCommon = 1 o1.member_1 = 1
o2 is Class_Simple_1 o2.common = 2 o2.member_1 = 2
o1 <= o2
// Result // o1.ncommon = 2 // o1.member_1 = 1
- Para los tipos avanzados con subelementos dinámicos (por ejemplo, el tipo xmlNode o los elementos estructurados de un servicio web), los subelementos tienen prioridad sobre las propiedades estándar del tipo.
Ejemplo:
// Declare the classes Class_xmlNode is Class Name is string Tag1 is string Tag2 is string END // Assignment o1 is Class_xmlNode o1.Name = "" o1.Tag1 = "" o1.Tag2 = "" c1 is xmlNode c1..Name = "XML_node_with_Name_tag" c1.Name= "Name" c1.Tag1 = "Tag1" c1.Tag2 = "Tag2" o1 <= c1 // Result // o1.Name = "Name" // o1.Tag1 = "Tag1" // o1.Tag2 = "Tag2"
- Caso especial: copia homónima entre estructuras o clases:
- El atributo "mapping" está permitido para los miembros de la estructura o clase de origen o destino (pero no para ambos).
- Si un miembro derivado tiene el mismo nombre que un miembro de la clase base o una asignación con el mismo nombre, sólo se tendrá en cuenta el nombre de la clase derivada..
- Límite: La copia homónima no está disponible:
- en objetos de red,
- en objetos de automatización,
- si el origen y el destino son tipos avanzados con subelementos dinámicos.
Asignación tomando como referencia: ...y que no se puede hacer nada... La asignación mediante la toma de referencia obliga al elemento de destino a hacer referencia a la misma área de datos que el elemento fuente. Esta asignación no se puede utilizar con los tipos simples (enteros, reales, cadenas, etc.). Este tipo de asignación se puede utilizar directamente para manipular: Los operadores para la toma de referencia (=, <= et <-) devuelven "Null" si la asignación o la toma de referencia es inválida.. Usted tiene la capacidad de escribir el siguiente código:Object1 is BaseClass1 object Object2 is DerivedClass object
Object1 <- Object2
IF Object1 = Null THEN Trace("Object1 is not a DerivedClass or an ancestor class of DerivedClass.") ELSE Trace("Object1 is a DerivedClass or an ancestor class of DerivedClass.") END
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|