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 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
¿Es adecuado usar Typed Constants?

Hola amigos,

Recientemente he descubierto ese tipo de constantes y me gustaría saber si es recomendable su uso porque pareciera ser que no es bueno por el hecho de tener que habilitar la opción en las opciones del proyecto o utilizar la directiva {$J+}. Parece ser que no es algo natural del lenguaje pero realmente lo encuentro útil.

Alguien ha tenido alguna experiencia o me podría recomendar su uso, ¿porque?.

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata

Última edición por andre fecha: 10-12-2003 a las 20:57:54.
Responder Con Cita
  #2  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Con la directiva {$J+} lo que logras es que no sean constantes puras, ya que pueden cambiar de valor en tiempo de ejecución, por lo que realmente son variables estáticas con valores por defecto. Cuando no esta activa esta directiva, si son realmente constantes.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Muchas gracias delphi.com.ar, vos recomiendarías el uso de ese tipo de constantes, ¿es seguro?

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #4  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Una explicación de lo anterior:
Código:
procedure TForm1.Button1Click(Sender: TObject);
const
  Texto: string = '';
begin
  Caption := Texto;
  Texto := Edit1.Text;
end;
Prueba como la variable Texto conserva el valor en forma estática aunque el hilo de ejecución ha salido del scope.

Recomendar.... todo según se necesite.


Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Bueno,

Cuando ví por primera vez ese tipo de constantes fue en los articulos de Delphi en about.com, ahi explicaba lo anterior pero al final decía que Borland desalentaba el uso de ese tipo de constantes en Delphi 2, 3 y 4 y que luego lo mantuvo por razones de compatibilidad con Delphi 1.

Los usos pueden ser variados y yo tengo uno por lo menos, pero cuando mostré esto al equipo de desarrollo al cual pertenezco me aconsejaron investigar un poco más por el hecho de que no parece ser algo natural del lenguaje. Mirando un poco la documentación actual de Delphi (7) no encontré ninguna referencia mala a ese tipo de constantes, entonces quería saber si se aconseja su uso por ejemplo para mantener un contador, un timer, etc. Es decir, Borland ya lo ha incorporado como algo más del entorno o todavía es solamente por motivos de compatibilidad?, Los que la han utilizado, han encontrado algún problema o todo corre bien?.

Muchas gracias por tu tiempo.

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #6  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Piensa en lo siguiente: Las constantes reales son resueltas en al compilar. Este tipo de constantes, si la directiva $J esta activa, ocupan lugar en la memoria y.... ¿En qué momento se liberan?... A partir de aquí son todas suposiciones: si la variable pertenece a un método de una clase, supongo que se dispondrá durante la instancia de la clase. Si pertenece a un procedimiento regular, supongo que esta variable estará activa para toda la instancia de la aplicación, no deja de ser una variable global.

Además personalmente, creo no algo muy natural, y el lenguaje da otras herramientas mas puras para mantener valores en memoria mientras se necesiten.

¿Porqué no nos pasas el link al artículo?

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Este es el link del artículo del cual hablaba:

Typed Constants en About.com
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #8  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Ok... creo que el artículo coincide bastante con lo que te he dicho anteriormente. Por otro lado, lo último que te comenté (el scope de la variable), no es para que no utilices este tipo de variables, sino para que lo tengas en cuenta al momento de necesitarlas.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 10-12-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
delphi.com.ar comentó:
y el lenguaje da otras herramientas mas puras para mantener valores en memoria mientras se necesiten.
¿Por ejemplo?

// Saludos
Responder Con Cita
  #10  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Bueno, muchas gracias delphi.com.ar, agradezco muchísimo tu disposición. O sea que, para ir cerrando, no hay ningún inconveniente en utilizar las Typed Constants, pero hay maneras más limpias y/o naturales. Que recomendarías, una variable global en la unidad?.

Muchas gracias,

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #11  
Antiguo 10-12-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
andre comentó:
Bueno, muchas gracias delphi.com.ar, agradezco muchísimo tu disposición. O sea que, para ir cerrando, no hay ningún inconveniente en utilizar las Typed Constants, pero hay maneras más limpias y/o naturales. Que recomendarías, una variable global en la unidad?.
Espero la respuesta de dca acerca de la heramientas más naturales. Yo, si bien raramente usos este tipo de "constantes", no les veo ningún problema y creo que en ocasiones se justifica bastante. Si bien como dice dca, no dejan de ser variables globales en cuanto a la vida de la variable, prefiero usar una variable global que sólo puede ser accedidad desde el procedimiento para el cuál está destinada (typed constants) que una variable global que meses después me quedaré pensando para qué servía dicha variable cuando lea el código.

Además, usando la directiva equivalente $WRITEABLECONST ON|OFF quedará perfectamente claro en el código cuál era la intención.

// Saludos
Responder Con Cita
  #12  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Si necesitamos una variable dentro de una clase, la crearíamos como perteneciente a la clase (un campo). Si necesitamos una variable para acceder en toda la aplicación, crearemos una variable global. Sinceramente, muy pocas veces necesité de una variable global, si es que puedo tener todos los objetos comunicados o entrelazados.
En mis proyectos, las únicas variables globales, creadas por mi son la que contiene el DataModule principal y el Formulario principal que es el que contiene el menú.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #13  
Antiguo 10-12-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
delphi.com.ar comentó:
Si necesitamos una variable dentro de una clase, la crearíamos como perteneciente a la clase (un campo). Si necesitamos una variable para acceder en toda la aplicación, crearemos una variable global. Sinceramente, muy pocas veces necesité de una variable global, si es que puedo tener todos los objetos comunicados o entrelazados.
En mis proyectos, las únicas variables globales, creadas por mi son la que contiene el DataModule principal y el Formulario principal que es el que contiene el menú.

Saludos!
Sí, pero como veo las cosas, hay una diferencia entre necesitar una variable durante toda la aplicación que necesitar una variable en toda la aplicación. Lo primero se refiere al tiempo de vida de la variable y lo segundo al alcance de la variable. Donde yo veo útiles las constantes tipadas es dentro de un procedimiento, función o método; variables que requieren preservar su valor entre llamadas pero que sólo conciernen a dicho procedimiento, función o método.

// Saludos
Responder Con Cita
  #14  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Pues en ese caso.. ¡No se me ocurre otra cosa!
¿En qué caso te ha surguido que necesites guardar datos para que solo sean visibles dentro de un procedimiento?¿Algun acumulador?.... ¿No se podría solucionar con parámetros var?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #15  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Mi caso es el siguiente:

En un formulario tengo 1 ComboBox y 1 CheckBox para la edición de un campo. El CheckBox tiene la función similar a los administradores gráficos de base de datos como el IBExpert cuando editas en modo de formulario, sirve para decir que ese campo será nulo, el ComboBox sirve para cargar los posibles valores para ese campo.

Cuando el usuario pone el CheckBox a False, quiero que el ItemIndex del ComboBox sea -1 para que el usuario tenga la impresión visual de que ese campo tendrá el valor nulo y luego cuando el usuario pone el CheckBox a True, quiero que muestre el ItemIndex anterior.

Realmente podría implementar esto con una variable global en la unidad y pienso que al cerrar el formulario esta se liberaría junto con la liberación del formulario pero me pareció cómodo utilizar las Typed Constants. Si no hay ningún inconveniente, si no trae ningún problema, ¿porqué no?.

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
Responder Con Cita
  #16  
Antiguo 10-12-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
No confundas una variable global en la unit con un campo.

Una variable global, son aquellas que estan definidas fuera de la clase, digamos que no pertenecen a esta. Estas variables pueden ser accedidas desde cualquier unit que utilice a esta otra.

Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
  private
  public
  end;


var
  Form1: TForm1;


implementation
...
end.
Campo, se suele llamar a las variables que pertenecen a una clase. Estas variables existen en forma diferente para cada instancia de esta clase:
Código:
 
type
  TForm1 = class(TForm)
  private
  public
    FCampo: Integer;
  end;
...
end.

PD: He utilizado muchas veces Typed Constants sin problemas, y no creo que te traigan problemas. Lo que asusta del artículo que enviaste, es si seguirán existiendo, lo que creo muy posible.
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #17  
Antiguo 10-12-2003
andre andre is offline
Miembro
 
Registrado: may 2003
Ubicación: Entre Rios, Argentina
Posts: 80
Poder: 22
andre Va por buen camino
Muchas gracias por las respuestas, han sido de mucha ayuda para mí.

Saludos.
__________________
Andre R. Coelho
Universidad Adventista del Plata
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


La franja horaria es GMT +2. Ahora son las 14:18:24.


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