AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

¡Nueva funcionalidad de WINDEV, WEBDEV y WINDEV Mobile 2024!
Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / Editores / Editor de proyectos / Descripción del proyecto
  • Presentación
  • Permitir tipos que admiten valores Null
  • Funcionalidades asociadas a la activación de tipos que admiten valores Null
  • Almacenar valores Null en una variable
  • Presentación
  • Tipos simples que admiten valores Null
  • Determinar si un elemento es Null
  • Obtener el valor de un elemento que permite valores Null
  • Operador?!
  • Operador??
  • Operador??*
  • Operador ??=
  • Operador ??=*
  • Utilizar valores Null en funciones WLanguage
  • Caso especial: Serializar/Deserializar
  • Caso especial: Sintaxis con prefijo
  • Utilizar valores Null en los procedimientos
  • Pasar parámetros por valor
  • Valor de retorno
  • Operaciones disponibles en variables que permiten valores Null
  • Operaciones aritméticas
  • Operaciones de comparación
  • Operaciones booleanas
  • Condiciones
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
Aceptar valores NULL: Permitir tipos que admiten valores Null
Presentación
A partir de la versión 2024, puede activar los tipos que admiten valores Null en un proyecto WINDEV, WEBDEV o WINDEV Mobile. La activación de los tipos que admiten valores Null en un proyecto cambia la forma en la que éste gestiona los valores Null.
Esta página de ayuda presenta las distintas funcionalidades asociadas a esta opción.

Permitir tipos que admiten valores Null

Para permitir tipos que admiten valores Null:
  1. Abra la ventana de descripción del proyecto: en la pestaña "Proyecto", en el grupo "Proyecto", haga clic en "Descripción".
  2. En la pestaña "Compilación", seleccione la opción "Permitir tipos que admiten valores NULL".
  3. Un mensaje con las implicaciones de activar esta opción se abre. Haga clic en "Activar".
  4. Valide la ventana de descripción del proyecto.

Funcionalidades asociadas a la activación de tipos que admiten valores Null

Al seleccionar la opción "Permitir tipos que admiten valores NULL", se habilita una serie de funcionalidades. Estas funcionalidades cambian el modo en el que se manipulan los valores Null:
Almacenar valores Null en una variable

Presentación

La activación de la opción "Permitir tipos que admiten valores NULL" implica cambios en la asignación de la constante Null a tipos de variables simples. En este modo, los tipos simples (int, string, date, etc.) no admiten valores Null.
Observación: Los tipos complejos (object, array, etc.) no requieren cambios: estos tipos admiten valores NULL de forma predeterminada.
Para utilizar la constante Null con tipos simples, es necesario declarar que estos tipos aceptan valores Null.

Tipos simples que admiten valores Null

Para declarar que un tipo simple acepta valores Null, utilice una de las siguientes sintaxis:
  • agregue un signo de interrogación ("?") después del nombre del tipo.
    <Variable name> is <Type>?
    Por ejemplo:
    n is int?
    s is UNICODE string?
    n1 is 8-byte int?
  • utilice el atributo de extensión <nullable>.
    <Variable name> is <Type> <nullable>
    Por ejemplo:
    n is int <nullable>
Observaciones:
  • Estas sintaxis solo están disponibles si la opción "Permitir tipos que admiten valores NULL" está activada.
  • El valor predeterminado de un tipo que admite Null es NULL (y no el valor inicial del tipo).
  • La inferencia de tipos está disponible para los tipos que admiten valores Null. Por ejemplo:
    LET x = ProcedureReturnNullableInteger()
Los tipos simples que pueden admitir valores Null son los siguientes:
Determinar si un elemento es Null
Cuando se activa la opción "Permitir tipos que admiten valores NULL", el resultado de la comparación de un elemento con la constante Null cambia como se indica a continuación:
  • los tipos simples que no admiten valores Null pueden compararse con la constante Null: el resultado siempre es False.
  • los tipos simples que admiten valores Null pueden compararse con la constante Null: el resultado es True si el valor es Null, de lo contrario, el resultado es False.
  • los tipos complejos (object, array, etc.) que admitían valores Null en versiones anteriores no cambian de comportamiento: siempre pueden compararse con valores Null.
Observaciones:
  • Campo HFSQL: Si un archivo de datos y un campo admiten valores Null, es posible determinar si un campo HFSQL contiene un valor Null comparándolo directamente con la constante Null. Ejemplo:
    IF Queue.ItemWithNullValue = Null THEN
    	// Process ...
    END
  • Control Campo de entrada: Si se selecciona la opción "Devolver NULL si está vacío" para el control, es posible determinar si un control Campo de entrada devolvió Null.
Obtener el valor de un elemento que permite valores Null
Al activar la opción "Permitir tipos que admiten valores NULL", es necesario verificar el código utilizado para obtener el valor de un elemento que admite valores NULL.
La asignación del valor de un elemento que admite valores Null a otro elemento que también los admite es completamente válida. El valor Null se conserva, si es necesario.
Sin embargo, la asignación de un elemento que admite valores Null a un elemento no los admite provoca un error de compilación. Por ejemplo, las siguientes líneas de código no están permitidas:
s is string = Queue.NullableItem
o
Left(Queue.NullableItem)

Debe especificar cómo deben gestionarse los valores Null, directamente en la línea de código. Para ello, WLanguage proporciona varios operadores que permiten acceder a los elementos que admiten valores Null: ?!, ??, ??*, ??= y ??=*.

Operador?!

Si está seguro de que el valor no será Null, puede utilizar el operador ?!. El error de compilación sobre el uso de un elemento que admite valores Null no se mostrará en este caso.
Sintaxis:
nullable_element?!
Ejemplo:
IF Queue.ItemWithNull <> Null THEN
	s is string = Queue.ItemWithNull?!
END
Recordatorio: Si el código es incorrecto y el valor se establece en Null en tiempo de ejecución, se producirá una excepción del mecanismo de seguridad de WLanguage.
Observación: En muchos casos, el operador?! se agrega automáticamente para facilitar la escritura del código:
  • en elementos que no pueden determinarse en tiempo de compilación: resultados de consultas, indirecciones, etc.
  • en determinadas sintaxis condicionales. Por ejemplo:
    IF Queue.ItemWithNull <> Null THEN
    	s is string = Queue.ItemWithNull	//?! operator automatically added
    END
Atención: aunque se agregue automáticamente el operador!?, es necesario especificar cómo debe gestionarse el valor Null. De lo contrario, se producirá una excepción en tiempo de ejecución.

Operador??

El operador ?? permite obtener:
  • el valor de un elemento que admite valores Null si este valor no es Null,
  • un valor de sustitución, si el valor del elemento es Null.
Sintaxis:
nullable_expression?? substitution_value
Ejemplo:
// The string will contain "N/A" if the item is Null
s is string = Queue.ItemWithNull?? "N/A"

Operador??*

El operador ??* permite obtener:
  • el valor de un elemento que admite valores Null si este valor no es Null.
  • el valor predeterminado del tipo, si el valor del elemento es Null.
Sintaxis:
nullable_expression??*
Ejemplo:
// The string will be empty if the item is Null
s is string = Queue.ItemWithNull??*

Operador ??=

El operador ??= permite asignar directamente un valor de sustitución a un elemento que admite valores Null y que contiene el valor Null. Este operador solo está disponible para variables o campos de archivos de datos.
Sintaxis:
nullable_element??= substitution_value
Ejemplo:
nullable_value is string?
nullable_value = ProcedureToBeExecuted()
nullable_value??= "N/A"
Esto permite simplificar el siguiente código:
nullable_value is string?
nullable_value = ProcedureToBeExecuted()
IF nullable_value = Null THEN
	nullable_value = "N/A"
END

Operador ??=*

El operador ??=* permite asignar directamente un valor predeterminado a un elemento que admite valores Null y que contiene el valor Null. Este operador solo está disponible para variables o campos de archivos de datos.
Sintaxis:
nullable_element??=*
Ejemplo:
nullable_value is string?
	nullable_value = ProcedureToBeExecuted()
	nullable_value??=*
Esto permite simplificar el siguiente código:
nullable_value is string?
nullable_value = ProcedureToBeExecuted()
IF nullable_Value = Null THEN
	nullable_value??*
END
Utilizar valores Null en funciones WLanguage
Para simplificar la depuración, la función Trace muestra el valor Null o los tipos que admiten valores Null:
  • si el valor es Null, se muestra la cadena "<Null>".
  • si el tipo es nullable pero no contiene un valor Nulo, se muestra la cadena "" junto al valor.
Las funciones TypeVar y DataType devuelven el tipo subyacente.
A partir de la versión 2024 Update 2, puede utilizar la función TypeIsNullable para saber si un tipo admite valores Null.
Nota: Un gran número de funciones WLanguage aceptan valores Null y funcionan como antes (TreeAdd, TreeModify, etc.).

Caso especial: Serializar/Deserializar

  • En una deserialización binaria, los miembros que admiten valores Null se establecen en Null si no existen en el búfer serializado.
  • En una serialización XML, los miembros que admiten valores Null y que contienen el valor Null no se serializan. Durante la deserialización, los miembros se establecen en Null si no existen en el contenido XML.
  • En una serialización JSON, los miembros que admiten valores Null y que contienen el valor Null no se serializan. Durante la deserialización, los miembros se establecen en Null si no existen en el contenido JSON.

Caso especial: Sintaxis con prefijo

El operador ?. permite utilizar una función WLanguage directamente con un tipo que admite valores Null, sin utilizar una variable.
Sintaxis:
result = nullable_element?. WLanguageFunction(...)
  • Si nullable_element no es Null, se llama a la función.
  • Si el valor de nullable_element es Null, no se llama a la función y el resultado es Null.
Ejemplo:
full_string_or_Null is string? = ...
first_ten_characters_or_Null is string? = full_string_or_Null?. Left s(10)
Los operadores ?. y ?? pueden combinarse para obtener un resultado simple:
first_ten_characters is string = full_string_or_Null?. Left s(10)?? ""
Utilizar valores Null en los procedimientos

Pasar parámetros por valor

Los valores nulos o nullable no pueden pasarse a un parámetro no nullable de tipo simple, ni a un parámetro no nullable no tipado.
Para pasar un valor nulo o nullable a un parámetro, utilice las sintaxis siguientes:
PROCEDURE ProcedureWithANullableParameter(parameter?)
PROCEDURE ProcedureWithANullableParameter(parameter is int?)
Observación: Las conversiones implícitas entre tipos simples se aplican entre los tipos que admiten valores Null correspondientes.

Valor de retorno

De forma similar a los parámetros, debe especificar que el tipo de retorno es nullable si un Procedure debe devolver Null o un valor nullable.
Las sintaxis correspondientes son:
PROCEDURE ProcedureReturnsANullableValue ():?
PROCEDURE ProcedureReturnsANullableValue (): int?
Operaciones disponibles en variables que permiten valores Null

Operaciones aritméticas

Las operaciones aritméticas y de cadena no están permitidas si uno de los operandos es Null.
La ejecución de estas operaciones provoca una excepción.
Un error de compilación permite identificar estos casos.
Operaciones aritméticas:
  • + (suma y concatenación)
  • ++
  • +=
  • -
  • --
  • -=
  • *
  • *=
  • / (división y concatenación de cadenas para rutas)
  • /=
  • %
  • ^

Operaciones de comparación

El operador = (igual a) devuelve:
  • True si ambos valores son Null;
  • False si un valor es Null y el otro no.
El operador <> (no igual a) devuelve:
  • True si un valor es Null y el otro no;
  • False si ambos valores son Null.
Otras comparaciones generan una excepción si uno de los valores es Null:
  • <
  • <=
  • >
  • >=
  • ~=
  • ~~
  • [=
  • [~
  • [~~
  • =]
  • ~]
  • ~~]
  • [=]
  • [~]
  • [~~]

Operaciones booleanas

Las operaciones booleanas tienen un comportamiento particular con los valores booleanos que admiten valores Null.
  • NOT
    • NOT Null = Null
    • NOT False = True
    • NOT True = False
  • OR
    NullFalseTrue
    NullNullNullTrue
    FalseNullFalseTrue
    TrueTrueTrueTrue
  • AND
    NullFalseTrue
    NullNullFalseNull
    FalseFalseFalseFalse
    TrueNullFalseTrue

Condiciones

En una condición (IF, WHILE, etc.), el valor Null equivale a False.
Versión mínima requerida
  • Versión 2024
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 22/03/2024

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