Tipos de datos ordinales y enumerados para Delphi

Delphi lenguaje de programación es un ejemplo de un lenguaje fuertemente tipado. Esto significa que todas las variables deben ser de algún tipo. Un tipo es esencialmente un nombre para un tipo de datos. Cuando declaramos una variable, debemos especificar su tipo, que determina el conjunto de valores que la variable puede contener y las operaciones que se pueden realizar en ella.

Muchos de los tipos de datos integrados de Delphi, como Integer o Cuerda, se pueden refinar o combinar para crear nuevos tipos de datos. En este artículo, veremos cómo crear tipos de datos ordinales personalizados en Delphi.

Tipos ordinales

Las características definitorias de los tipos de datos ordinales son: deben consistir en un número finito de elementos y deben ordenarse de alguna manera.

Los ejemplos más comunes de tipos de datos ordinales son todos los tipos enteros, así como Char y Booleano tipo. Más precisamente, Object Pascal tiene 12 tipos ordinales predefinidos: Entero, Shortint, Smallint, Longint, Byte, Word, Cardinal, Boolean, ByteBool, WordBool, LongBool y Char. También hay otras dos clases de tipos ordinales definidos por el usuario: tipos enumerados y tipos de subrango.

instagram viewer

En cualquier tipo ordinal, debe tener sentido moverse hacia atrás o hacia adelante al siguiente elemento. Por ejemplo, los tipos reales no son ordinales porque no tiene sentido moverse hacia atrás o hacia adelante. La pregunta "¿Cuál es el próximo real después de 2.5?" no tiene sentido.

Dado que, por definición, cada valor, excepto el primero, tiene un predecesor único y cada valor, excepto el último, tiene un sucesor único, varios predefinidos funciones se usan cuando se trabaja con tipos ordinales:

Función Efecto
Ord (X) Da el índice del elemento
Pred (X) Va al elemento enumerado antes de X en el tipo
Succ (X) Va al elemento que aparece después de X en el tipo
Dic (X; norte) Mueve n elementos hacia atrás (si se omite n mueve 1 elemento hacia atrás)
Inc (X; norte) Mueve n elementos hacia adelante (si se omite n mueve 1 elemento hacia adelante)
Bajo (X) Devuelve el valor más bajo en el rango del tipo de datos ordinal X
Alto (X) Devuelve el valor más alto en el rango del tipo de datos ordinal X


Por ejemplo, High (Byte) devuelve 255 porque el valor más alto del tipo Byte es 255, y Succ (2) devuelve 3 porque 3 es el sucesor de 2.

Nota: Si intentamos usar Succ cuando en el último elemento Delphi generará un excepción en tiempo de ejecución si la comprobación de rango está activada.

Tipo enumerado de Delphi

La forma más fácil de crear un nuevo ejemplo de un tipo ordinal es simplemente enumerar un grupo de elementos en algún orden. Los valores no tienen un significado inherente, y su ordinalidad sigue la secuencia en la que se enumeran los identificadores. En otras palabras, una enumeración es una lista de valores.

tipo TWeekDays = (lunes, martes, miércoles, jueves, viernes, sábado, domingo);

Una vez que definimos un tipo de datos enumerados, podemos declarar que las variables son de ese tipo:

var SomeDay: TWeekDays;

El propósito principal de un tipo de datos enumerados es dejar en claro qué datos programa manipulará Un tipo enumerado es realmente una forma abreviada de asignar valores secuenciales a constantes. Dadas estas declaraciones, el martes es una constante de tipo TWeekDays.

Delphi nos permite trabajar con los elementos en un tipo enumerado utilizando un índice que proviene del orden en que se enumeraron. En el ejemplo anterior, lunes en el TWeekDays La declaración de tipo tiene el índice 0, el martes tiene el índice 1, y así sucesivamente. Las funciones enumeradas en la tabla anterior nos permiten, por ejemplo, usar Succ (viernes) para "ir a" el sábado.

Ahora podemos intentar algo como:

para SomeDay: = lunes a domingo hacerSi SomeDay = martes luego
ShowMessage ('¡Martes es!');

La Biblioteca de componentes visuales de Delphi utiliza tipos enumerados en muchos lugares. Por ejemplo, la posición de un formulario se define de la siguiente manera:

TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter);

Usamos Posición (a través del Inspector de objetos) para obtener o establecer el tamaño y la ubicación del formar.

Tipos de subrango

En pocas palabras, un tipo de subrango representa un subconjunto de los valores en otro tipo ordinal. En general, podemos definir cualquier subrango comenzando con cualquier tipo ordinal (incluido un tipo enumerado previamente definido) y usando un punto doble:

tipo TWorkDays = lunes.. Viernes;

Aquí TWorkDays incluye los valores lunes, martes, miércoles, jueves y viernes.

Eso es todo, ¡ahora ve a enumerar!

instagram story viewer