![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿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. Última edición por andre fecha: 10-12-2003 a las 20:57:54. |
#2
|
||||
|
||||
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. ![]() |
#3
|
|||
|
|||
Muchas gracias delphi.com.ar, vos recomiendarías el uso de ese tipo de constantes, ¿es seguro?
Saludos. |
#4
|
||||
|
||||
Una explicación de lo anterior:
Código:
procedure TForm1.Button1Click(Sender: TObject); const Texto: string = ''; begin Caption := Texto; Texto := Edit1.Text; end; 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. ![]() |
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
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. ![]() |
#7
|
|||
|
|||
#8
|
||||
|
||||
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. ![]() |
#9
|
||||
|
||||
Cita:
// Saludos |
#10
|
|||
|
|||
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. |
#11
|
||||
|
||||
Cita:
Además, usando la directiva equivalente $WRITEABLECONST ON|OFF quedará perfectamente claro en el código cuál era la intención. // Saludos |
#12
|
||||
|
||||
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. ![]() |
#13
|
||||
|
||||
Cita:
// Saludos |
#14
|
||||
|
||||
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. ![]() |
#15
|
|||
|
|||
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. |
#16
|
||||
|
||||
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. 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. ![]() |
#17
|
|||
|
|||
Muchas gracias por las respuestas, han sido de mucha ayuda para mí.
Saludos. |
![]() |
|
|
![]() |
|