Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asignacion de Valor (https://www.clubdelphi.com/foros/showthread.php?t=77098)

ruedabeat2003 20-12-2011 20:01:34

Asignacion de Valor
 
Tengo una declaración de tipo de esta manera:

Código:

  TipoIdentificador = (_0, _110, _22);
He declarado ya una variable de este tipo asi:

Código:

  el_identificador : TipoIdentificador;
Pero ahora como le asigno el valor a mi nueva variable?, la asigne así pero merca un error de incompatibilidad de tipos:
Código:

  el_identificador := '1';
Como debo asignarle cualquiera de los 3 valores?

Saludos. :confused:

Al González 20-12-2011 20:25:14

Son incompatibles porque '1' es un valor de tipo Char, mientras que el_identificador es del tipo enumerado TipoIdentificador. Delphi no admite asignaciones directas entre ambos tipos de datos.

A el_identificador sólo podrás asignarle alguna de las tres constantes que definiste dentro en el tipo TipoIdentificador, es decir, _0, _110 o _22.

Saludos. :)

ecfisa 20-12-2011 21:01:25

Hola.

Es tál cuál como claramente te lo expuso Al. Y si quisieras ampliar un poco la funcionalidad podés utilizar conjutos (set), un ejemplo:

Código Delphi [-]
...
type
  TDiasDeSemana  = (Lunes, Martes, Miercoles, Jueves, Viernes, Sabado, Domingo);
  TDias = set of TDiasDeSemana;

procedure Revisar(Dia: TDiasDeSemana);
var
  FinDeSemana: TDias;
begin
  FinDeSemana:= [Sabado, Domingo];
  if Dia in FinDeSemana then
    ShowMessage('¡ Por fin !')
  else
    ShowMessage('Ya me lo temía...');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Revisar(Lunes);
  Revisar(Sabado);
  ...
end;

Saludos.

ruedabeat2003 20-12-2011 21:21:24

entonces mis asignaciones deben ser asi:

Código:

el_identificador := _0;
o bien:

Código:

el_identificador := _110;
o bien:

Código:

el_identificador := _22;
La definición del tipo TipoIdentificador = (_0, _110, _22); me la dió el WSDL Importer al generar las clases que se requieren para un Cliente Webservice, es por eso que me surge esa duda. Lo mismo me pasa con otro tipo declarado así:
Código:

  { "http://www.ventanillaunica.gob.mx/cove/ws/oxml/"[GblSmpl] }
  UnidadMedida = (
      _1,
      _2,
      _3,
      _4,
      _5,
      _6,
      _7,
      _8,
      _9,
      _10,
      _11,
      _12,
      _13,
      _14,
      _15,
      _16,
      _17,
      _18,
      _19,
      _20,
      _21
);

Tengo que asignar valor a una variable Clave_de_unidad declarada asi:

clave_de_unidad:UnidadMedida;

Ahora mi duda es, esos valores ( _1, _2, _3, _4, ..., _19, _20, _21) a que se refieren, especificamente el signo '_' antes de cada valor que yo supuse era un entero? :confused: :confused:

ecfisa 20-12-2011 22:10:16

Cita:

Ahora mi duda es, esos valores ( _1, _2, _3, _4, ..., _19, _20, _21) a que se refieren, especificamente el signo '_' antes de cada valor que yo supuse era un entero?
Hola ruedabeat2003.

Los tipos enumerativos son conjuntos de valores ordinales constantes, no predefinidos y se representan por identificadores. Al decir no predefinidos me refiero a que son creados por el usuario:
Código Delphi [-]
type
  TMeses = (enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre);
  TAutosDeportivos = (Lamborghini,Ferrari,Porsche,Bugatti);
  ...
La calificación de ordinales, es por que poseen un órden (redundantemente hablando), que va del 0 al último elemento:
Código Delphi [-]
  ShowMessage(IntToStr(Ord(_22))); // mostrará 2 (en tu ejemplo)

Repitiendo lo dicho más arriba por Al si declaras
Código Delphi [-]
type
   TipoIdentificador = (_0, _110, _22);

el_identificador es de tipo TipoIdentificador, no es de ningún tipo predefinido en Delphi. También podría haber sido declarada como: (a0, a110, a22),(a_0, a_110, a_22),(a,b,c), etc. Siempre respetando la sintáxis exigida por Delphi para los identificadores. (no són válidos por ejemplo: *a, #3, -5,...).

A una variable de tipo TipoIdentificador declarada como en tu primer mensaje, solo se le podran asignar los valores: _0, _110 y _22.


Un saludo.

ruedabeat2003 20-12-2011 22:45:31

Ok
 
Bien, bien, ya me queda claro, pudieron haber declarado TAnimal=(gato, perro, cerdo,tigre) y a una variable de tipo Tanimal solo le podria signar los valores: gato, perro, cerdo o tigre. OK

Gracias por la ayuda. :D

Al González 20-12-2011 23:10:10

Cita:

Empezado por ruedabeat2003 (Mensaje 421648)
Bien, bien, ya me queda claro, pudieron haber declarado TAnimal=(gato, perro, cerdo,tigre) y a una variable de tipo Tanimal solo le podria signar los valores: gato, perro, cerdo o tigre. OK

Así es, y aunque signifiquen lo mismo que cerdo, no podrías asignarle cochino, marrano, puerco o guarro :D, a no ser que declares a estos como identificadores cuyo tipo sea TAnimal. Una manera de hacerlo sería incluirlos como "sinónimos" de cerdo dentro del tipo enumerado:
Código Delphi [-]
Type
  TAnimal = (gato, perro, cerdo, cochino = cerdo, marrano = cerdo,
    puerco = cerdo, guarro = cerdo, tigre);

procedure TForm1.Button1Click(Sender: TObject);
Var
  A :TAnimal;
begin
  A := gato;
  ShowMessage (IntToStr (Byte (A)));  // 0
  A := tigre;
  ShowMessage (IntToStr (Byte (A)));  // 3
  A := cerdo;

  If (A = cochino) And (A = marrano) And (A = puerco) And (A = guarro) Then
    ShowMessage (IntToStr (Byte (A)));  // 2
end;

Un cochino abrazo. :p

Al González.

ruedabeat2003 21-12-2011 02:29:20

clases, tipos y conjuntos.
 
La verdad es que me estaba peleando con la definicion de Clases, tipos y conjuntos, ahora me ha quedado claro, y sobre lo que preguntaba era sobre un tipo definido de acuerdo a una tipo enumerado, mientras que yo seguia metido con las clases, ya me ha quedado claro y hoy he avanzado mucho en mi desarrollo.

Gracias por la ayuda. Saludos. :D ;) :cool:


La franja horaria es GMT +2. Ahora son las 20:06:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi