Estuve viendo una cosa con el interprete de Python y luego hice el mismo programa en Gambas.
En este ejemplo se usa los operadores and y or.
Recordemos que And para que sea verdadero sus dos operadores deben ser verdaderos.
Y en el caso de Or , solo en el caso de que sea Falso sus dos operadores, el resultado sera Falso.
El resto es verdadero.
De acuerdo.
Suponer que tenemos dos expresiones que tenemos que evaluar y dependiendo del resultado hará una cosa u otra.
A - Falso OR Verdadero
B - Verdadero OR Verdadero
C - Verdadero AND Verdadero
D - Falso AND Verdadero
¿ Que ocurre en los distintos casos ?.
A: Se necesita saber si la ultima expresión es verdadera
B: Sabemos que sera verdadera. ¿ Necesitamos terminar de evaluar la segunda expresión ?. No. Sabemos que es verdadera con la primera.
C: Volvemos a necesitar en el caso de un And las dos expresiones.
D: En este caso como el primer operador o (expresión completa) es falso, sabremos siempre que lo que venga detrás dará igual, el primer operador ya
ha determinado el resultado.
Bien. En el interprete Python no se preocupa de evaluar la expresión siguiente si al evaluar la primera ya le esta diciendo el resultado de la expresión en total.
No va a variar.
¿ Que ocurre ?. Que si sabe el resultado al comienzo, no se se ejecuta lo que haya detrás, (una llamada a una función por ejemplo dentro
de la expresión a evaluar, que nunca sera llamada).
En el caso de gambas no es así. Necesita evaluar toda la expresión completa.
Ejemplo en gambas y su salida:
Public Sub Main()
If Falso("gatos") Or Verdadero("perros") Then Print "Paso 1"
If Verdadero("hola") Or Verdadero("adios") Then Print "Paso 2"
If Verdadero("Spam") And Verdadero("queso") Then Print "Paso 3"
If Falso("rojo") And Verdadero("azul") Then Print "Paso 4"
End
Public Function Verdadero(mensaje As String) As Boolean
Print mensaje
Return True
End
Public Function Falso(mensaje As String) As Boolean
Print mensaje
Return False
End
If Falso("gatos") Or Verdadero("perros") Then Print "Paso 1"
If Verdadero("hola") Or Verdadero("adios") Then Print "Paso 2"
If Verdadero("Spam") And Verdadero("queso") Then Print "Paso 3"
If Falso("rojo") And Verdadero("azul") Then Print "Paso 4"
End
Public Function Verdadero(mensaje As String) As Boolean
Print mensaje
Return True
End
Public Function Falso(mensaje As String) As Boolean
Print mensaje
Return False
End
Citar:
Ejemplo en Python y su salida:
# Ejemplo de Corto-circuito
# VerdaderoFalso
def VerdaderoFizz(mensaje):
print (mensaje)
return True
def FalsoFizz(mensaje):
print (mensaje)
return False
if FalsoFizz('Gatos') or VerdaderoFizz('Perros'):
print ('Paso 1')
if VerdaderoFizz('Hola') or VerdaderoFizz('Adios'):
print ('Paso 2')
if VerdaderoFizz('Spam') and VerdaderoFizz('Queso'):
print ('Paso 3')
if FalsoFizz('Rojo') and VerdaderoFizz('Azul'):
print ('Paso 4')
# VerdaderoFalso
def VerdaderoFizz(mensaje):
print (mensaje)
return True
def FalsoFizz(mensaje):
print (mensaje)
return False
if FalsoFizz('Gatos') or VerdaderoFizz('Perros'):
print ('Paso 1')
if VerdaderoFizz('Hola') or VerdaderoFizz('Adios'):
print ('Paso 2')
if VerdaderoFizz('Spam') and VerdaderoFizz('Queso'):
print ('Paso 3')
if FalsoFizz('Rojo') and VerdaderoFizz('Azul'):
print ('Paso 4')
Citar:
Una vez un compañero de nuestra comunidad me dijo que para comprender un lenguaje además de conocer sus virtudes,
debía conocer también sus defectos o carencias.
Lo cierto es que cuesta asimilar cosas nuevas.Luego esto se traduce en mucho tiempo para entenderlo y asimilarlo para llevarlo a cabo.
Saludos