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)

Lepe 16-07-2015 20:36:32

Coincido en que hay que prohibirlo.

http://stackoverflow.com/questions/7...with-in-delphi

Si se usa como :
Código Delphi [-]
with Tquery.create(nil) do begin 
  open
  sql := 'blah blha';
  ExecSql;
  Free;
end;
Pues vale... aunque eso debería ser una función llamada ExecSql( const sql : string) con todo el código dentro, así que aún así no debería usarse el with.

El problema que he visto en varios sitios es este:
Código Delphi [-]
procedure TForm3.HazAlgo();
with Form1, Form2 do begin
  ... un chorro código aquí
  ClientWitdth := 300;
  ... un chorro código aquí
end;
end;
A qué se refiere el Clientwidth, a Self, a Form1, a Form2... y las rutinas que se llaman dentro del with, ¿donde están definidas?.

Pues eso, claridad, legibilidad, seguridad... Mejor "sin" que "con" ;), y si conduces, mejor "sin" :p.

Al González 17-07-2015 01:16:50

Yo insisto en que hay que quitarle todo lo malo (anidación, cabecera multivalor y ausencia de marcador) y agregarle un marcador/calificador especial para los miembros referidos dentro del bloque. De esa manera se solucionan TODOS los problemas que conlleva el uso de With. Aquí una propuesta que va en esa línea de razonamiento.

Hace un año tuve el placer de debatir el tema con Jeroen Pluimers (recomiendo esta lectura): http://www.delphifeeds.com/go/f/1138...hiFeeds.com%29

Estoy seguro de que mi boba propuesta puede mejorarse con la participación de muchos otros colegas. ¿Se animan también a corregir el With?

Saludos. :)

Casimiro Notevi 17-07-2015 10:14:04

Cita:

Empezado por Al González (Mensaje 494552)
Yo insisto en que hay que quitarle todo lo malo (anidación, cabecera multivalor y ausencia de marcador) y agregarle un marcador/calificador especial para los miembros referidos dentro del bloque. De esa manera se solucionan TODOS los problemas que conlleva el uso de With. Aquí una propuesta que va en esa línea de razonamiento.

Hace un año tuve el placer de debatir el tema con Jeroen Pluimers (recomiendo esta lectura): http://www.delphifeeds.com/go/f/1138...hiFeeds.com%29

Estoy seguro de que mi boba propuesta puede mejorarse con la participación de muchos otros colegas. ¿Se animan también a corregir el With?

Saludos. :)

^\||/^\||/^\||/

Ñuño Martínez 17-07-2015 14:39:21

Cita:

Empezado por Al González (Mensaje 494552)
Yo insisto en que hay que quitarle todo lo malo (anidación, cabecera multivalor y ausencia de marcador) y agregarle un marcador/calificador especial para los miembros referidos dentro del bloque. De esa manera se solucionan TODOS los problemas que conlleva el uso de With. Aquí una propuesta que va en esa línea de razonamiento.

Hace un año tuve el placer de debatir el tema con Jeroen Pluimers (recomiendo esta lectura): http://www.delphifeeds.com/go/f/1138...hiFeeds.com%29

Estoy seguro de que mi boba propuesta puede mejorarse con la participación de muchos otros colegas. ¿Se animan también a corregir el With?

Saludos. :)

Mi madre, ya no me acordaba. Incluso comenté algo. ¡Y leí cosas! :eek: ¿Y fue hace poco más de un año? Tengo problemas de memoria. :(

De todas formas, como dije en su momento, el uso de las comillas no me convence. En la conversación que enlaza Lepe alguien comenta que VisualBasic prefija con un punto. Sería una adición interesante.

olbeup 20-07-2015 12:46:01

Cita:

Empezado por Lepe (Mensaje 494543)
Coincido en que hay que prohibirlo.

http://stackoverflow.com/questions/7...with-in-delphi

Si se usa como :
Código Delphi [-]
with Tquery.create(nil) do begin 
  open
  sql := 'blah blha';
  ExecSql;
  Free;
end;
Pues vale... aunque eso debería ser una función llamada ExecSql( const sql : string) con todo el código dentro, así que aún así no debería usarse el with.

El problema que he visto en varios sitios es este:
Código Delphi [-]
procedure TForm3.HazAlgo();
with Form1, Form2 do begin
  ... un chorro código aquí
  ClientWitdth := 300;
  ... un chorro código aquí
end;
end;
A qué se refiere el Clientwidth, a Self, a Form1, a Form2... y las rutinas que se llaman dentro del with, ¿donde están definidas?.

Pues eso, claridad, legibilidad, seguridad... Mejor "sin" que "con" ;), y si conduces, mejor "sin" :p.

El último objecto (Form2) es el que prevalece y el ClienteWidth sólo afectara el cambio al Form2.
Código Delphi [-]
with Form1, Form2 do begin
es igual a
Código Delphi [-]
with Form1 do
  with Form2 do begin
    ClientWitdth := 300;
    ...
    ...
  end;
Si los objetos obj1, obj2, objn son iguales, sólo afectara al último objecto, si tienes todo esto claro, pues NO tendrás problema con el with.

ejemplo:
Código Delphi [-]
type TDate = record
  Day: Integer;
  Month: Integer;
  Year: Integer;
end;
var OrderDate: TDate;
La siguiente con la declaración.
Código Delphi [-]
with OrderDate do
  if Month = 12 then
  begin
    Month := 1;
    Year := Year + 1;
  end
  else
    Month := Month + 1;
Esto es equivalente a
Código Delphi [-]
if OrderDate.Month = 12 then
begin
  OrderDate.Month := 1;
  OrderDate.Year := OrderDate.Year + 1;
end
else
  OrderDate.Month := OrderDate.Month + 1;
Y si quieres coger el año del Form2
Código Delphi [-]
with OrderDate do
  begin
    Year := Form2.Year;
    ...
  end;
Un saludo.


La franja horaria es GMT +2. Ahora son las 09:00:46.

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