Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Bloques (https://www.clubdelphi.com/foros/showthread.php?t=80055)

viveba 31-08-2012 18:10:53

Bloques
 
Es posible construir un bloque del tipo with ... do en c++?

digamos que quiero hacer esto (que hacía en delphi) en C++builder:

with ComponenteX do
begin
Propiedad1 := ....;
Propiedad2 := ....;
..............
end;

desde ya, muchas gracias a todos.

Casimiro Notevi 31-08-2012 18:20:59

Recuerda poner títulos descriptivos a tus preguntas, "bloques" no describe nada.

Y no olvides poner los tags al código fuente, ejemplo:



¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Gracias :)

ecfisa 01-09-2012 00:33:00

Cita:

Empezado por viveba (Mensaje 441358)
Es posible construir un bloque del tipo with ... do en c++?

digamos que quiero hacer esto (que hacía en delphi) en C++builder:

with ComponenteX do
begin
Propiedad1 := ....;
Propiedad2 := ....;
..............
end;

desde ya, muchas gracias a todos.

Hola.

No, pero podes reducir el largo de los nombres para que no sea tan pesado usarlos si tenes que realizar muchas asignaciones:
Código:

  TStringGrid *sg = static_cast <TStringGrid*> (StringGrid1);
  TClientDataSet *cds = (TClientDataSet*) ClientDataSet1; // otro modo
  TDateTimePicker *dtp = static_cast<TDateTimePicker*>(DateTimePicker1);
  //etc.

En este caso podrías usar sg en lugar de StringGrid1, cds en lugar de ClientDataSet1 y dtp en lugar de DateTimePicker1.

Saludos.

viveba 01-09-2012 02:19:47

Gracias por responder tan rápido.
Ya estoy incorporándolo.

Ñuño Martínez 10-09-2012 13:50:01

Cita:

Empezado por ecfisa (Mensaje 441427)
No (...)

¿Seguro? Hace muchísimo que no trabajo con C++, pero creo recordar que también tienen bloques with <name> { ... }. ¿O me estoy liando con PHP y JavaScript?

roman 10-09-2012 17:07:56

No sabía que JavaScript tenía with. PHP, casi estoy seguro, no lo tiene.

// Saludos

ecfisa 10-09-2012 18:44:29

Hola.

En C/C++ no existe una declaración equivalente al with de Delphi.

Y creo que en Delphi hay que ser moderado con su uso por que puede hacer dificultosa la lectura del código y hasta producir resultados indeseados si no se utiliza correctamente, como por ejemplo:
Código Delphi [-]
  with Edit1, ListBox1, ComboBox1 do
  begin
    Text := 'xxx';   // ??
    Items.Add(Text); // ??
    ...
  end;
Por otro lado, usándolo bién, es una herramienta que simplifica y hasta clarifica el código.

Saludos. :)

viveba 10-09-2012 19:01:28

Hola!

No se mucho de C, apenas un poquito de pascal (delphi) y hasta ahí nomás, pero si puedo decir que lo siguiente:
with Edit1, ListBox1, ComboBox1 do
begin
Text := 'xxx'; // ??
Items.Add(Text); // ??
...
end;

No funciona pues da "error de ambigüedad" y es lógico; with (con) no puede identificar a cual identificador le corresponde cada propiedad, cuando los identificadores tienen las mismas propiedades.

la clausula with solo debe usarse cuando uno pretende darle claridad a un código, seguir ciertas normas de programación, no afecta al funcionamiento de un programa ni lo hace más grande ni más lento.

desde mi lugar -soy profesor- lo uso bastante, pero solo por cuestiones didácticas.

gracias por todo lo que se dijo al respecto y a todos los que participaron de mi simple comentario.

roman 10-09-2012 19:09:02

Cita:

Empezado por viveba (Mensaje 442641)
No funciona pues da "error de ambigüedad" y es lógico; with (con) no puede identificar a cual identificador le corresponde cada propiedad, cuando los identificadores tienen las mismas propiedades.

¿En qué versión de delphi? Al menos en la 7 no da error. De hecho, tal como dice la ayuda, cuando se ponen múltiples objetos, es como si se anidaran los bloques, es decir, poner:

Código Delphi [-]
with Edit1, Edit2 do
  Text := 'Hola mundo';

es equivalente poner:

Código Delphi [-]
with Edit1 do
  with Edit2 do
    Text := 'Hola';

y el Edit afectado es el 2 por estar en el bloque más inmediato a la asignación.

// Saludos

ecfisa 10-09-2012 20:07:50

Hola.

No voy a argumentar el por que no tendría que mostrar error de ambiguedad ya que roman lo ha echo de forma inmejorable. En el ejemplo que puse, quién recibiría la cadena 'xxx' en su propiedad Text es ComboBox1.

Yo también uso la version 7 de Delphi y no recibo siquiera una advertencia, aunque puede ser que en versiones posteriores sea así...

Saludos.:)


La franja horaria es GMT +2. Ahora son las 15:35:04.

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