Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Operador 'and' (https://www.clubdelphi.com/foros/showthread.php?t=47096)

senda 17-08-2007 20:09:59

Operador 'and'
 
Hola, ¿alguien sabe cómo de listo es el operador 'and' de Delphi? Me explico, trabajo con Delphi 7 y quería saber en qué orden se ejecutan las instrucciones cuando hay un 'and' por medio. Es decir:
Código:

if A and B then
C
else
D

Primero se ejecuta A, y luego (esto es lo que quiero saber) si A es falso ¿se ejecuta B o se pasa directamente a D?

jhonny 17-08-2007 20:25:36

Cita:

Empezado por senda (Mensaje 224230)
Primero se ejecuta A, y luego (esto es lo que quiero saber) si A es falso ¿se ejecuta B o se pasa directamente a D?

Hay una directiva llamada $B, si $B es $B-, eso significara que esto se analizara de la manera "perezosa", osea que tomando tu ejemplo, si A no cumple la condición, pasara a ejecutar D y no tomara en cuenta a B. Si $B es igual a $B+ entonces hara lo contrario.

Nota: $B por defecto es negativo.

Cita:

Empezado por Ayuda de Delphi
Boolean short-circuit evaluation

Type Switch
Syntax {$B+} or {$B-}
{$BOOLEVAL ON} or {$BOOLEVAL OFF}
Default {$B-}
{$BOOLEVAL OFF}
Scope Local
Remarks

The $B directive switches between the two different models of code generation for the and and or Boolean operators.

In the {$B+} state, the compiler generates code for complete Boolean expression evaluation. This means that every operand of a Boolean expression built from the and and or operators is guaranteed to be evaluated, even when the result of the entire expression is already known.
In the {$B-} state, the compiler generates code for short-circuit Boolean expression evaluation, which means that evaluation stops as soon as the result of the entire expression becomes evident in left to right order of evaluation.

For further details, see the section "Boolean operators" in the Object Pascal Language Guide.


maeyanes 17-08-2007 20:26:05

Si tienes desactivada la opción Complete boolean eval en las opciones del compilador (compiler) de tu proyecto, estas se evaluan tal que si A es falso ya no se evalua el valor de B...


Saludos...


Edit: Veo que por n-sima vez contestaron antes que yo... :p

senda 17-08-2007 23:31:39

Muchas gracias maeyanes xq el tema de las directivas {$B+} y {$B-} no me había quedado nada claro.

jhonny 18-08-2007 00:00:44

Cita:

Empezado por senda (Mensaje 224290)
xq el tema de las directivas {$B+} y {$B-} no me había quedado nada claro.

:o:(:(:(:o

b3nshi 18-08-2007 00:16:17

Mmm... la verdad... la explicacion q te dieron son muy tecnicas, quizas deberias empezar por conocer q son operadores... Existen diferentes operadores, el AND, OR, not, ==, <> son operadores logicos o booleanos.

En cuanto al funcionamiento del mismo es simple...

Solo te voy a explicar, de una forma simple el AND y el OR... luego puedes buscar mas informacion en internet...

Veamos... cuando nosotros usamos estructuras condicionales (if, if else, while, case) estamos haciendo preguntas... si las respuestas son afirmativas entonces se procede a realizar algo de lo contrario no se hace nada o se realiza otra cosa... es decir:

SI (condicion) ES
verdadera
SINO
falsa

Traducido al delphi:

Código Delphi [-]
if (condicion) then
begin
//Si es verdadero hago esto
end
else
begin
//Si no es verdadero hago esto
end;

Los operadores AND y OR aparecen en la condicion...

Cuando hacemos una pregunta con AND,(¿se cumple esto Y Esto?) si una de las condiciones es falsa, entonces lo logico sera dejar de preguntar, ya q necesitamos q se cumpla todo, por lo q no es conveniente habilitar la opcion: Complete boolean eval.
o al menos, no para casos sensillos como este.
En el caso del OR, (¿Se cumple esto O esto?) si se sigue preguntando en el caso de q una no se cumpla, y solo hasta encontrar una verdadera ya q solo necesitas q se cumpla una u otra para q la sintaxis sea verdadera...

Esto lo puedes ver mejor en un cuadro de VERDAD, creo q asi se llama:
AND:
cond1---cond2---res
--V-------V------V
--V-------F------F
--F-------V------F
--F-------F------F

OR:
cond1 cond2 res
--V-------V------V
--V-------F------V
--F-------V------V
--F-------F------F

Los cuadros me los invente porq sinceramente no me los acuerdo... pero creo q eran asi... :D

Espero te sirva! Y perdon si ya sabias todo esto:o

{Saludos}


La franja horaria es GMT +2. Ahora son las 05:28:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi