Corto-circuito, VerdaderoFalso, Interpretes


Objetivo: Corto-circuito, VerdaderoFalso, Interpretes
Hola!.

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


Citar:

gatos
perros
Paso 1
hola
adios
Paso 2
Spam
queso
Paso 3
rojo
azul


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')


Citar:

Gatos
Perros
Paso 1
Hola
Paso 2
Spam
Queso
Paso 3
Rojo


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

Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
Shell escribió: [Ver mensaje]


En el caso de gambas no es así. Necesita evaluar toda la expresión completa.

...

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.


Bien, en este caso el problema es que no has encontrado la sintaxis correcta para los cortocircuitos, porque sí que existe en gambas.

Cambia el bloque de condiciones por esto:

If Falso("gatos") Or If Verdadero("perros") Then Print "Paso 1"
If Verdadero("hola") Or If Verdadero("adios") Then Print "Paso 2"
If Verdadero("Spam") And If Verdadero("queso") Then Print "Paso 3"
If Falso("rojo") And If Verdadero("azul") Then Print "Paso 4"


La sintaxis para los cortocircuitos es "And If", "Or If", etc. ¡Comprueba los resultados!

Y aquí la documentación:

http://gambasdoc.org/help/lang/if?es&v3

Saludos

Perfil MP  
Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
Jesús:

Gracias, es idéntico!.

Cuando pasas de un lenguaje a otro, quieres hacerlo idéntico al otro, no siempre se puede.
Hay que buscar una alternativa, aunque no sea la misma sintaxis.Hay cosas que se complica bastante
para convertirlas de uno al otro. Y es mejor pensarlo dos veces.

Con la opción de código:
¿ Que debo hacer la próxima vez que quiera mostrar en el mensaje un código en Python para que podamos verlo lo mejor posible en la comunidad ?.
¿ Cual es la mejor ?. Bash,C,gambas,Xml..

Saludos

Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
Shell escribió: [Ver mensaje]


Con la opción de código:
¿ Que debo hacer la próxima vez que quiera mostrar en el mensaje un código en Python para que podamos verlo lo mejor posible en la comunidad ?.
¿ Cual es la mejor ?. Bash,C,gambas,Xml..

Saludos


Para que el código de cualquier lenguaje salga coloreado con la sintaxis correcta, sólo hay que cambiar "gambas" por el nombre del lenguaje apropiado en minúsculas:

[code linenumbers=false syntax=gambas]
[code linenumbers=false syntax=python], etc

Algún día haré que se pueda escoger desde un desplegable... pero me tienen que entrar ganas, jaja!


Saludos

Perfil MP  
Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
jguardon escribió: [Ver mensaje]


Algún día haré que se pueda escoger desde un desplegable... pero me tienen que entrar ganas, jaja!


No tenia ni idea que se pudiera hacer con cualquier lenguaje.

Lo cierto es que no me dio nunca en gambas por usar un if detrás de otro , siempre estuve usando el IF, ELSE-IF,ELSE pero un IF detrás de otro,
no lo había visto, es que hasta parece rara la expresión. Siempre se aprende algo nuevo.

Es muy probable que este post le valga a los compañeros, pero tiene un titulo raro. Entonces su nombres es corto-circuito, que nombres, como para
saber lo que es a la primera.

Gracias por la doble información.

Saludos

Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
Shell:

La verdad es que estamos un poco "viciados" con el antiguo BASIC, pero gambas tiene muchas más opciones y ordenes.
A mi me gusta visitar de vez en cuando esta página de la documentación: http://www.gambasdoc.org/help/lang?v3, siempre descubro cosas nuevas.

Saludos

Julio

Nota:
Hoy he descubierto esta orden Inline Arrays , y es muy parecido a las listas de python

Public Sub Form_Open()
Public Sub Form_Open()

Dim valor As Variant[] = ["2.4", [3, 2.4], 3.2]

Print valor, valor[0], valor[1], valor[2]

Print valor[1][0], valor[1][1]

End


¿guay ehhhh?

última edición por jsbsan el Domingo, 14 Julio 2013, 20:33; editado 1 vez
Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
jsbsan escribió: [Ver mensaje]

Hoy he descubierto esta orden Inline Arrays , y es muy parecido a las listas de python


Eso es el array "normal" que ya todos conocemos. Tenemos los Native Arrays que siguen siendo lo mismo, pero con el tipo de dato predefinido para sus elementos. En realidad lo único que varía es la forma de llenarlos de datos, porque sigue siendo necesario declararlos como un tipo de array nativo. Es cierto que es lo más parecido a las listas de python, así podremos sacar más partido a ciertas formas de programar más "pythónicas".

El otro tipo de array es el Estático o embebido, donde se declaran las dimensiones en el identificador, y es bastante diferente al nativo por varios motivos. Ver al final de la página de documentación:

http://www.gambasdoc.org/help/cat/arraydecl?es&v3

Bueno, que la cosa se desvía del tema inicial, saludos!

Perfil MP  
Objetivo: Re: Corto-circuito, VerdaderoFalso, Interpretes
Julio y Jesús:

Lo cierto es que recuerda mucho a las listas de Python.

Hay algo que comentare en otro post para no salirme de temática.
Diccionarios.

Voy a buscar antes y luego escribo el post.

Olvidaba. ¿ Son distintos los índices en ingles y español en la documentación online de gambas ?.
(¿ Esta mas al día ?. Quiero decir)

http://www.gambasdoc.org/help/lang?es&v3

Saludos

última edición por Shell el Lunes, 15 Julio 2013, 08:42; editado 1 vez

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.452s (PHP: -67% SQL: 167%)
Consultas SQL: 46 - Debug off - GZIP Activado