Ver Mensaje Individual
  #6  
Antiguo 09-01-2017
Avatar de geolife
[geolife] geolife is offline
Miembro Premium
 
Registrado: nov 2006
Ubicación: Barcelona
Posts: 87
Reputación: 18
geolife Va por buen camino
Apreciados ecfisa, Al González

Muchísimas gracias, nunca deja uno de aprender algo sobre el lenguaje.

Ni se me había pasado por la cabeza declarar el tipo como un puntero y reverenciar el mismo directamente, lo que al final consigue lo que buscamos, evitar duplicar código innecesario y hacer más sencilla la referencia. Verdaderamente Delphi es un lenguaje lleno de grandes posibilidades y recursos y más acompañado de mentes talentosas como las vuestras. Me habéis alegrado el día!!

Quisiera saber si hay alguna dirección/forma dentro del club para realizar donaciones. En mi caso pocas veces intervengo para responder correos a otros usuarios y si en cambio para preguntar, y donde tengo que decirlo, siempre recibo gentilmente vuestra ayuda y conocimientos. Una manera de suplir esto es hacer de vez en cuando alguna donación que pueda servir para el mantenimiento de este espacio y que luego sea usada como la organización considere. Ya me diréis y gracias!!

Un abrazo!

Cita:
Empezado por Al González Ver Mensaje
Básicamente, es lo que dice ecfisa.

Y es que en Delphi existen dos grandes clases de constantes: las constantes verdaderas (true constants) y las contantes con tipo o tipificadas (typed constants). La declaración de una constante verdadera sirve para indicarle al compilador que asimile un nombre como "alias" de un valor literal. Así que en todos los lugares donde aparezca el alias utilizado, el compilador estará realmente copiando el valor literal. En cambio una constante tipificada es, en esencia, una variable global con un valor que no puede cambiar.
Código Delphi [-]
Const
  S1 = 'Foo';  // Constante verdadera
  S2 :String = 'Bar';  // Constante tipificada (con tipo explícito)
Para indicar el valor de otra constante (verdadera o no) o el valor predeterminado de un parámetro, el compilador de Delphi sólo admite valores literales o constantes verdaderas. Pero existe una salvedad: para indicar el valor de una constante con tipo explícito puntero, también se puede utilizar la dirección de memoria de algo que Delphi pueda ubicar en tiempo de compilación.

Lo anterior supone que si geolife desea evitar duplicidad de código (no tener que escribir más de una vez la conformación de los ocho vectores), podría declarar sus tipos y constantes así:
Código Delphi [-]
Type
  TYao = (Yin, Yang, YinMutable, YangMutable);
  PAlmacenTrigrama = ^TAlmacenTrigrama;  // Tipo puntero a TAlmacenTrigrama
  TAlmacenTrigrama = Array [1..3] Of TYao;

Const
  Kan :TAlmacenTrigrama = (Yin, Yang, Yin);
  Kun :TAlmacenTrigrama = (Yin, Yin, Yin);
  Zhen :TAlmacenTrigrama = (Yang, Yin, Yin);
  Xun :TAlmacenTrigrama = (Yin, Yang, Yang);
  Qian :TAlmacenTrigrama = (Yang, Yang, Yang);
  Dui :TAlmacenTrigrama = (Yang, Yang, Yin);
  Gen :TAlmacenTrigrama = (Yin, Yin, Yang);
  Li :TAlmacenTrigrama = (Yang, Yang, Yang);
  Trigramas :Array [1..8] Of PAlmacenTrigrama =
    (@Kan, @Kun, @Zhen, @Xun, @Qian, @Dui, @Gen, @Li);

Y obtendrá el mismo funcionamiento cuando pida algo como
Código Delphi [-]
Trigramas [1] [2]

(Recordar que la arroba, en Delphi, sirve para obtener la dirección de memoria —o puntero— de lo que esté expresado detrás de ese símbolo).

Saludos cordiales y feliz año 2017 a todos.

Al González.
Responder Con Cita