Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2015
franco_cvm franco_cvm is offline
Miembro
NULL
 
Registrado: abr 2015
Posts: 20
Poder: 0
franco_cvm Va por buen camino
¿Que esta indicando esta expresión?

Hola, navegando por Internet, encontré un código de lista de punteros y me surgió curiosidad de la forma en que escribió una sentencia de WHILE, donde la variable bandera es un booleano:
Código Delphi [-]
While (bandera) do
yo siempre estaba acostumbrado a poner
Código Delphi [-]
While (bandera=false) do
o esta
Código Delphi [-]
While (bandera=true) do

¿que significa cuando la variable esta sola?

acá el código completo, ordena la lista de menor a mayor según la información de los nodos:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  ULT,X,Y,Z: pnodo;
  bandera:Boolean;
  aux:integer;
BEGIN
ULT:=nil;
bandera:=True;
While (bandera) do
  Begin
    X:=CZO^.prox;
    Y:=X^.prox;
    bandera:=False;
    While (Y<>ULT) do
      begin
        if (X^.data)>(Y^.data) then
          begin
            bandera:=true;
            aux:=x^.data;
            X^.data:=Y^.data;
            Y^.data:=aux;
          end;
        X:=Y;
        Y:=Y^.prox;
      end;
      if (Y=ULT) then
          ULT:=X;
    End;
   Z:=CZO;
While (Z^.prox)<>nil do
  begin
  Z:=Z^.prox;
  memo2.Lines.Add(inttostr(Z.data));
  end;
END;
Responder Con Cita
  #2  
Antiguo 17-06-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Cuando esta sola es lo mismo que decir = True

Para comparar por falso podes usar el operador not


Código Delphi [-]
  while not archivo.Eof do
  \\ código
Responder Con Cita
  #3  
Antiguo 17-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola franco_cvm.

El tipo Boolean enumera los valores verdadero o falso. Cuando en Delphi haces una comparación del tipo,
Código Delphi [-]
 if (a = b) then
de "(a = b)" se obtiene un resultado que puede ser verdadero o falso según sean los contenidos de 'a' y 'b'. Supongamos que,
Código Delphi [-]
var
  B : Boolean;
begin
  B := ( 5 = 5)
la variable "B" recoge un valor (que es True en el código anterior) y ya debes ver claro que: B = (5 = 5) = True. Entonces la construcción,
Código Delphi [-]
 if (B = True) ...
si bién no es sintácticamente incorrecta, es redundante.

Una variable de tipo booleana almacena la conclusión de una o mas premisas, y su resultado puede ser bivalente (True o False). De allí que es reiterativo evaluar la igualdad por verdadero o falso si la variable ya posee ese valor.

Resumiendo, si B tiene el valor True hacer:
Código Delphi [-]
 if  B  then
tiene el mismo resultado que:
Código Delphi [-]
 if B = True then

Del mismo modo que si B tiene el valor False hacer:
Código Delphi [-]
 if not B then
tiene el mismo resultado que:
Código Delphi [-]
 if B = False then
Y aunque el compilador es generoso, mi consejo es que no uses el modo redundante.

Saludos

Edito: No había visto el mensaje de Agustín mientras escribía pero es la misma idea.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-06-2015 a las 09:46:17.
Responder Con Cita
  #4  
Antiguo 17-06-2015
franco_cvm franco_cvm is offline
Miembro
NULL
 
Registrado: abr 2015
Posts: 20
Poder: 0
franco_cvm Va por buen camino
Graciass

lo que no entiendo es porque si pongo:
Código Delphi [-]
begin
ULT:=nil;
While (bandera=true) do
  Begin
    X:=CZO^.prox;
    Y:=X^.prox;
    bandera:=False;
    While (Y<>ULT) do
      begin
        if (X^.data)>(Y^.data) then
          begin
            bandera:=true;
            aux:=x^.data;
            X^.data:=Y^.data;
            Y^.data:=aux;
          end;
.......


Cita:
Empezado por ecfisa Ver Mensaje
Hola franco_cvm.

El tipo Boolean enumera los valores verdadero o falso. Cuando en Delphi haces una comparación del tipo,
Código Delphi [-]
 if (a = b) then
de "(a = b)" se obtiene un resultado que puede ser verdadero o falso según sean los contenidos de 'a' y 'b'. Supongamos que,
Código Delphi [-]
var
  B : Boolean;
begin
  B := ( 5 = 5)
la variable "B" recoge un valor (que es True en el código anterior) y ya debes ver claro que: B = (5 = 5) = True. Entonces la construcción,
Código Delphi [-]
 if (B = True) ...
si bién no es sintácticamente incorrecta, es redundante.

Una variable de tipo booleana almacena la conclusión de una o mas premisas, y su resultado puede ser bivalente (True o False). De allí que es reiterativo evaluar la igualdad por verdadero o falso si la variable ya posee ese valor.

Resumiendo, si B tiene el valor True hacer:
Código Delphi [-]
 if  B  then
tiene el mismo resultado que:
Código Delphi [-]
 if B = True then

Del mismo modo que si B tiene el valor False hacer:
Código Delphi [-]
 if not B then
tiene el mismo resultado que:
Código Delphi [-]
 if B = False then
Y aunque el compilador es generoso, mi consejo es que no uses el modo redundante.

Saludos

Edito: No había visto el mensaje de Agustín mientras escribía pero es la misma idea.
Responder Con Cita
  #5  
Antiguo 17-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola franco
Cita:
Empezado por franco_cvm Ver Mensaje
Graciass

lo que no entiendo es porque si pongo:
Código Delphi [-]
begin
ULT:=nil;
While (bandera=true) do
  Begin
    X:=CZO^.prox;
    Y:=X^.prox;
    bandera:=False;
    While (Y<>ULT) do
      begin
        if (X^.data)>(Y^.data) then
          begin
            bandera:=true;
            aux:=x^.data;
            X^.data:=Y^.data;
            Y^.data:=aux;
          end;
.......
Tendrías que explicar que es lo que no entendes, por así como está planteado, no veo a donde apunta tu duda.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 17-06-2015
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Después de la generosa explicación de ecfisa y con lo ya dicho por AgustinOrtu, difícilmente podría yo agregar algo importante. Baste decir que donde quiera que se espere una expresión Boolean, es decir, un fragmento de código que se evaluará o ejecutará dando por resultado un valor de falso o verdadero, puede ser colocada tanto una llamada a una función de resultado Boolean, como una variable o propiedad de tipo Boolean sola, o bien una combinación de otras expresiones (usando paréntesis y And, Or, etc.).

En la sentencia
Código Delphi [-]
If IsUpperCase ('ABC') Then
la expresión Boolean es: IsUpperCase ('ABC')

En la sentencia
Código Delphi [-]
If IsUpperCase ('ABC') = True Then
la expresión Boolean es: IsUpperCase ('ABC') = True

Al If entrará si la expresión evalúa a (resulta en) True. Así que si "IsUpperCase ('ABC')" es ya una expresión falso/verdadero, entonces no hay necesidad de hacer más compleja esa expresión añadiéndole una comparación con el signo de igual y la constante True ("IsUpperCase ('ABC') = True").

Ese If sería válido incluso si escribieras:
Código Delphi [-]
If ((IsUpperCase ('ABC') = True) = True) = True Then
Pero es mejor escribir código conciso:
Código Delphi [-]
If IsUpperCase ('ABC') Then
Y, como dije antes, lo mismo aplica a una variable o propiedad Boolean:
Código Delphi [-]
If MiVariable Then
De este modo, evitamos recargar a la aplicación con ciclos de CPU innecesarios, o, en caso de que el compilador simplifique las expresiones redundantes, al menos no ofuscamos el código fuente, dejándolo un poco más limpio y fácil de leer.

Al González.
Responder Con Cita
  #7  
Antiguo 17-06-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Agregando, también suele ser muy útil usar el tipo Boolean en los constant arrays para alternar valores de acuerdo a una condición:
Código Delphi [-]
const
  CCOLOR : array[Boolean] of TColor = (clRed, clLime);
begin
  Edit1.Color := CCOLOR[Edit1.Text > ''];
  ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 17-06-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
franco_cvm,

Cita:
Empezado por franco_cvm
...¿Que esta indicando esta expresión?...While (bandera) do...


Revisa esta información:
Espero sea útil

Nelson.
Responder Con Cita
Respuesta



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
El arroz que está llegando a nuestras mesas no está autorizado para consumo humano sakuragi La Taberna 5 13-10-2013 00:07:14
Ayuda con error! expresion demasiado compleja en la expresion de consulta escorpionrojo43 SQL 8 16-07-2011 22:03:16
Está bien esta consulta Select count? enecumene MySQL 12 30-08-2007 03:54:29
¿Está mal escrito? Perberos Varios 1 06-05-2006 10:32:17
Que está mal ? jwmoreira PHP 3 04-05-2005 19:32:29


La franja horaria es GMT +2. Ahora son las 23:49:50.


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