PDA

Ver la Versión Completa : Bloques


viveba
31-08-2012, 18:10:53
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:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

Gracias :)

ecfisa
01-09-2012, 00:33:00
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:

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
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:

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
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:


with Edit1, Edit2 do
Text := 'Hola mundo';


es equivalente poner:


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.:)