Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Utilizacion del With (https://www.clubdelphi.com/foros/showthread.php?t=88657)

lgarcia 10-07-2015 18:57:59

Utilizacion del With
 
Hola:
Tengo una duda porque siempre estube programando con Delphi 7 y recientemente he estado incursionando en Delphi y C++ XE2 y en D7 en el codigo uno podia poner una sintasis como esta para una simple consulta a un BD:
Código Delphi [-]
with Prueba do
begin
  Close;
  Open;
end;

y estuve buscando en la ayuda de ambos y no lo vi. Aunque el Delphi XE2 cuando compila, no lo muestra como error el C++ si. Es que esa expresion caduco o es que hay algo que lo sustituyo, porque la expresion with ahorraba buena cantidad de codigo.

Saludos
Luis Garcia

gatosoft 10-07-2015 19:09:42

Hola Luis,

Hasta donde se, no ha caducado. No veo un por qué. Sin embargo siempre se ha advertido sobre el cuidado de utilizarlo pues podría generar ambiguedades que no advierte el compilador (warnings)

Te dejo este enlace

saludo,

AgustinOrtu 10-07-2015 19:12:23

Nunca uses with, te vas a ahorrar un millardo de problemas

Al González 10-07-2015 19:24:57

Yo también considero que el With actual es muy nocivo si no se utiliza responsablemente, hay que tratar de evitarlo. Pero les recomiendo leer mi respuesta en la discusión enlazada por gatosoft:
Cita:

Empezado por gatosoft (Mensaje 494274)
Te dejo este enlace

Aparece hasta el final. :p

Saludos.

lgarcia 10-07-2015 19:42:54

Utilizacion del With
 
Voy a mirar el enlace y muchas gracias por sus comentarios.

Saludos
Luis Garcia

ecfisa 10-07-2015 21:17:31

Hola lgarcia.
Cita:

Empezado por lgarcia (Mensaje 494272)
...
Aunque el Delphi XE2 cuando compila, no lo muestra como error el C++ si.
...

Lo último que mencionas es totalmente normal y de esperar; ya que C++ no posee un comando equivalente al with de Delphi, que como bién te han comentado hay que usar con cuidado.

Saludos :)

nlsgarcia 10-07-2015 23:27:08

lgarcia,

Cita:

Empezado por lgarcia
...Utilizacion del With...

:rolleyes:

Adicionalmente a todo lo mencionado, te sugiero revisar esta información referente al uso de la sentencia With:
Espero sea útil :)

Nelson.

Neftali [Germán.Estévez] 13-07-2015 10:22:06

Si fuera por mi, habría que prohibirlo directamente...
:p

Casimiro Notevi 13-07-2015 12:20:56

Cita:

Empezado por Neftali (Mensaje 494330)
Si fuera por mi, habría que prohibirlo directamente...
:p

Yo nunca lo uso.

Caminante 13-07-2015 16:54:47

Cita:

Empezado por Neftali (Mensaje 494330)
Si fuera por mi, habría que prohibirlo directamente...
:p

Pues yo si suelo utilizarlo aunque, como ya se dijo, teniendo cuidado. Nunca anido sentencias with.

Saludos

olbeup 14-07-2015 09:06:23

Yo utilizo with continuamente ya que me ahorra mucho código y, nunca he tenido ningún problema.

He combinado with con dos componentes a la vez, TEdit y TStaticText y sin problema aparente y, aún lo sigo utilizando por la gran cantidad de código que me ahorro.

Si sabes utilizarlo y sabes cuales son sus beneficios y perjuicios, utilízalo en beneficio tuyo.

Un saludo.

Neftali [Germán.Estévez] 14-07-2015 09:59:59

No digo que se no sea útil y ahorre tiempo, pero eso provoca que el código sea menos claro y más difícil de debuggar.
por ende más propenso a errores.
Y esas son dos cosas que para mi tienen suma importancia, la claridad y la seguridad en cuanto a fallos.

AgustinOrtu 14-07-2015 20:33:13

Si mal no recuerdo lo lei en StackOverflow. Pero seamos sinceros, el with lo usamos porque a veces tenemos declaradas variables (bueno mas que variables, componentes) asi:

Código Delphi [-]
 { TFormX Private Declarations } 
  Tabla_Registro_Historico_Ventas: TADOQuery;

..
procedure HacerAlgoConLaTabla;
begin
  // esto es realmente tedioso
  if not(Tabla_Registro_Historico_Ventas.Active) then
    Tabla_Registro_Historico_Ventas.Open;

  Tabla_Registro_Historico_Ventas.Edit;
  Tabla_Registro_Historico_Ventas.FieldByName('Apellidos_Y_Nombres_Cliente').AsString := 
                                               Tabla_Registro_Historico_Ventas.FieldByName('Apellido').AsString + ', ' + 
                                               Tabla_Registro_Historico_Ventas.FieldByName('Nombres').AsString
  Tabla_Registro_Historico_Ventas.Post;
end;

procedure MasFacil;
var
  t: TADOQuery;
begin
  t := Tabla_Registro_Historico_Ventas;
  // esto es mucho mas amigable :)
  if not(t .Active) then
    t .Open;

  t .Edit;
  t .FieldByName('Apellidos_Y_Nombres_Cliente').AsString := t .FieldByName('Apellidos').AsString + ', ' + t.FieldByName('Nombres').AsString 
  t .Post;
end;

Neftali [Germán.Estévez] 15-07-2015 13:11:28

Justamente lo segundo es lo ideal.

(1) La declaración de componentes es clara.
(2) Escribimos lo mínimo posible.
(3) El debug y seguimiento es claro y sin errores.

^\||/^\||/

olbeup 15-07-2015 15:28:18

Código Delphi [-]
 { TFormX Private Declarations } 
  Tabla_Registro_Historico_Ventas: TADOQuery;

..
procedure HacerAlgoConLaTabla;
begin
  // esto es realmente tedioso
  if not(Tabla_Registro_Historico_Ventas.Active) then
    Tabla_Registro_Historico_Ventas.Open;

  Tabla_Registro_Historico_Ventas.Edit;
  Tabla_Registro_Historico_Ventas.FieldByName('Apellidos_Y_Nombres_Cliente').AsString := 
                                               Tabla_Registro_Historico_Ventas.FieldByName('Apellido').AsString + ', ' + 
                                               Tabla_Registro_Historico_Ventas.FieldByName('Nombres').AsString
  Tabla_Registro_Historico_Ventas.Post;
end;

procedure OtraForma;
begin
  // esto también puede ser
  with Tabla_Registro_Historico_Ventas do
  begin
    if (not Active) then
      Open;

    Edit;

    FieldByName('Apellidos_Y_Nombres_Cliente').AsString :=
      FieldByName('Apellido').AsString + ', ' + 
      FieldByName('Nombres').AsString;

    Post;
  end;
end;

procedure OtraMas;
var
  FadoCnn: TADOConnection;
begin
  FadoCnn := TADOConnection.Create(nil);
    FadoCnn.LoginPrompt := False;
    FadoCnn.ConnectionString := ;

  with TADOQuery.Create(nil) do
  begin
    Connection := FadoCnn;

    SQL.Add('SELECT');
    SQL.Add('    Apellidos_Y_Nombres_Cliente');
    SQL.Add('    ,Apellido');
    SQL.Add('    ,Nombres');
    SQL.Add('  FROM Clientes');

    Open;
    
    Edit;

    FieldByName('Apellidos_Y_Nombres_Cliente').AsString :=
      FieldByName('Apellido').AsString + ', ' + 
      FieldByName('Nombres').AsString;

    Post;

    FadoCnn.Free;
    Free;
  end;
end;

Para gustos los colores.

Un saludo.

Casimiro Notevi 15-07-2015 15:33:59

Cita:

Empezado por olbeup (Mensaje 494492)
Para gustos los colores.

No es cuestión de gustos :)

olbeup 16-07-2015 15:42:05

Cita:

Empezado por Casimiro Notevi (Mensaje 494493)
No es cuestión de gustos :)

Bueno, yo lo utilizo bastante por no decir siempre y me va muy bien.

Un saludo.

Casimiro Notevi 16-07-2015 17:25:23

Cita:

Empezado por olbeup (Mensaje 494529)
Bueno, yo lo utilizo bastante por no decir siempre y me va muy bien.

Bueno, yo no lo utilizo nunca y también me va muy bien :D:D:D

ecfisa 16-07-2015 19:38:15

Cita:

Empezado por olbeup (Mensaje 494529)
Bueno, yo lo utilizo bastante por no decir siempre y me va muy bien...

Cita:

Empezado por Casimiro Notevi (Mensaje 494531)
Bueno, yo no lo utilizo nunca y también me va muy bien...

Moraleja: El uso u omisión de la sentencia with no afecta en absoluto el progreso personal. :D

Saludos :)

nlsgarcia 16-07-2015 19:53:10

Daniel,

Cita:

Empezado por ecfisa
...El uso u omisión de la sentencia with no afecta en absoluto el progreso personal...

:D ^\||/

Nelson.


La franja horaria es GMT +2. Ahora son las 21:30:00.

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