https://foro.gambas-es.org/viewtopic.php?f=1&t=4670&p=26859#p26859
-----------------------------------
Shell
Sabado, 06 Junio 2015, 09:03

Re: ¿ Fallo Del Operador Ternario IIF ?
-----------------------------------
Si vamos a la wikipedia de Gambas y vemos lo que es NULL.

Nos dice:

[quote]
La constante nula.
Esta constante se emplea para representar una referencia a un objeto nulo, una cadena de longitud cero, una fecha nula, o un valor Variant no inicializado.
[/quote]

No dice nada de números. Solo cadenas, fechas o un Variant no inicializado.
Así que si ejecuto este código. 

[code linenumbers=false syntax=gambas]
Public Sub Main()
  
  Dim mivariable As Integer
  
  mivariable = Null
  
  If mivariable = 0 Or IsNull(mivariable) Then Print mivariable
  
End
[/code]
Da el error que comentas.  En cambio si el código fuera este:

[code linenumbers=false syntax=gambas]
Public Sub Main()
  
  Dim mivariable As Variant
  
  mivariable = Null
  
  If mivariable = 0 Or IsNull(mivariable) Then Print mivariable
  
End
[/code]

No da error. Lo que no sé es por que no muestra una salida como Null

Expándete un poco en el código que nos quedamos a medias.. :roll: 

[quote]
En otros compiladores existía la optimización en las evaluaciones y la evaluación se interrumpía una vez que era manifiestamente cierta o falsa. 
[/quote]

No sé hasta que punto eso es cierto en Gambas. Jesús me demostró que en Gambas tambien existen los cortocircuitos, al igual que en Python.
Python es de lo los que evalúan la primera expresión y si no lo necesita, no continua con la segunda. De ahí el tema de los cortocircuitos.

[code linenumbers=false syntax=gambas]
Public Sub Main()
  
  If FalsoFizz("Gatos") Or If VerdaderoFizz("Perros") Then Print "Paso 1"
  
  If VerdaderoFizz("Hola") Or If VerdaderoFizz("Adios") Then Print "Paso 2"
  
  If VerdaderoFizz("Spam") And If VerdaderoFizz("Queso") Then Print "Paso 3"
  
  If FalsoFizz("Rojo") And If VerdaderoFizz("Azul") Then Print "Paso 4"
  
End

Public Function VerdaderoFizz(mensaje As String) As Boolean
  
  Print (mensaje)
  Return True
  
End

Public Function FalsoFizz(mensaje As String) As Boolean
  
  Print (mensaje)
  Return False
  
End
[/code]

Salida:

[quote]
Gatos
Perros
Paso 1
Hola
Paso 2
Spam
Queso
Paso 3
Rojo
[/quote]

Saludos


