Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2008
Antigol Antigol is offline
Miembro
 
Registrado: dic 2003
Ubicación: Argentina
Posts: 14
Poder: 0
Antigol Va por buen camino
"And" con parentesis o sin parentesis es distinto??

Usando delphi 7.

MIren por favor esta imagen:

http://img248.imageshack.us/img248/2391/bugpp2.jpg

Fijense el valor de la variable "soymascercanoalapelota" , está en false (el if pide por ella en true) y sin embargo el programa y el mismo debug se meten dentro del if como si la condición se cumpliera.

Si les pongo un parentesis a cada una de las tres condiciones funciona pero sin los parentesis pasa eso. ¿Asi es el delphi? ¿o es un bug conocido?
Responder Con Cita
  #2  
Antiguo 26-02-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Para preguntar sobre el valor de una variable Boolean, no es necesario como lo tienes en tu código. Bien puedes hacerlo así:

Código Delphi [-]
if not Quieto and SoyMasCercanoALaPelota and not DiLaPelota then
begin
  // ...
end


Saludos...
Responder Con Cita
  #3  
Antiguo 26-02-2008
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
No es ningún BUG, solamente hay que tener en cuenta la precedencia de operadores.

Si el operador "AND" tiene mayor jerarquía que el operador "=", entonces la expresión será evaluada de esta manera:

Código Delphi [-]
if  Quieto = (false and SoyMasCercanoALPelota)  = (true and DiLaPelota) = false then
begin
  .
  .
end

Obviamente no te dará el resultado que esperas. Por esta razón, lo mejor es que tu mismo coloques los paréntesis para indicar el orden de evaluación.

Código Delphi [-]
if (Quieto = false) and (SoyMasCercanoALPelota = true) and (DiLaPelota = false) then
begin
  .
  .
end

Saludos
Responder Con Cita
  #4  
Antiguo 26-02-2008
Antigol Antigol is offline
Miembro
 
Registrado: dic 2003
Ubicación: Argentina
Posts: 14
Poder: 0
Antigol Va por buen camino
Si maeyanes, lo se, pero queria ver si asi funcionaba mi "problema".

Gracias Hector ahora entiendo como es.

Saludos!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comentario "aplastante" contra los que atacan la "piratería" Casimiro Notevi La Taberna 12 07-03-2010 14:03:02
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Ventana MDI, "Siempre visible" y "Pantalla completa" ixMike API de Windows 7 11-04-2007 18:36:55
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
Filtro con paréntesis gerly SQL 3 16-09-2003 12:28:22


La franja horaria es GMT +2. Ahora son las 03:15:36.


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