AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Sintaxis WLanguage / Operadores
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Operadores de asignación
HFSQL Client/ServerDisponible solo con este tipo de conexión
Presentación
Hay varios operadores de asignación disponibles:
Asignación simple: =
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 variablesEfecto
Tipos simples (integer, real, string, etc.)Se copia el valor de la variable.
ArraysEl array de destino es una referencia al array de origen.
Associative arraysSe copia el contenido del array.
QueueSe copia el contenido de la cola.
StackSe copia el contenido de la pila.
ListSe copia el contenido de la lista.
Object = Dynamic objectLos miembros del objeto dinámico se copian a los miembros del nuevo objeto.
Object = ObjectLos miembros del objeto de origen se copian a los miembros del objeto de destino.
Dynamic object = Dynamic objectEl objeto dinámico de destino es una referencia al objeto dinámico de origen.
Dynamic object = ObjectEl objeto dinámico de destino es una referencia al objeto de origen.
Structure = Dynamic structureSe copia la estructura. Los miembros con el mismo nombre se inicializan con los valores existentes. Los miembros que no existen se ignoran.
Structure = StructureSe 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 structureLa estructura dinámica de destino es una referencia a la estructura dinámica de origen.
Dynamic structure = StructureLa estructura dinámica de destino es una referencia a la estructura de origen.
Advanced type = Advanced typeSe copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes.
Advanced type = Dynamic advanced typeSe copia la variable avanzada. Las propiedades con el mismo nombre se inicializan con los valores existentes.
Dynamic advanced type = Advanced typeLa variable avanzada dinámica de destino es una referencia a la variable avanzada de origen.
Dynamic advanced type = Dynamic advanced typeLa 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:
    (x,y,z) = 0

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
Asignación por copia: <=
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:
Observaciones
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
Versión mínima requerida
  • Versión 15
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 27/05/2022

Señalar un error o enviar una sugerencia | Ayuda local