Tipi di dati ordinali ed enumerati per Delphi

click fraud protection

Delphi di linguaggio di programmazione è un esempio di un linguaggio fortemente tipizzato. Ciò significa che tutte le variabili devono essere di qualche tipo. Un tipo è essenzialmente un nome per un tipo di dati. Quando dichiariamo una variabile, dobbiamo specificare il suo tipo, che determina l'insieme di valori che la variabile può contenere e le operazioni che possono essere eseguite su di essa.

Molti dei tipi di dati integrati di Delphi, come Integer o Corda, può essere perfezionato o combinato per creare nuovi tipi di dati. In questo articolo, vedremo come creare tipi di dati ordinali personalizzati in Delphi.

Tipi ordinali

Le caratteristiche che definiscono i tipi di dati ordinali sono: devono consistere in un numero finito di elementi e devono essere ordinati in qualche modo.

Gli esempi più comuni di tipi di dati ordinali sono tutti i tipi Integer, nonché Char e booleano genere. Più precisamente, Object Pascal ha 12 tipi ordinali predefiniti: Integer, Shortint, Smallint, Longint, Byte, Word, Cardinal, Boolean, ByteBool, WordBool, LongBool e Char. Esistono anche altre due classi di tipi ordinali definiti dall'utente: tipi enumerati e tipi di sottorange.

instagram viewer

In qualsiasi tipo ordinale, deve avere senso spostarsi all'indietro o in avanti all'elemento successivo. Ad esempio, i tipi reali non sono ordinali perché spostarsi indietro o avanti non ha senso. La domanda "Qual è il prossimo vero dopo la 2.5?" è insignificante.

Poiché, per definizione, ogni valore tranne il primo ha un predecessore univoco e ogni valore tranne l'ultimo ha un successore unico, diversi valori predefiniti funzioni vengono utilizzati quando si lavora con tipi ordinali:

Funzione Effetto
Ord (X) Fornisce l'indice dell'elemento
Pred (X) Va all'elemento elencato prima di X nel tipo
Succ (X) Va all'elemento elencato dopo X nel tipo
Dic (X; n) Sposta n elementi indietro (se n viene omesso sposta indietro di 1 elemento)
Inc (X; n) Sposta n elementi in avanti (se n viene omesso sposta 1 elemento in avanti)
Basso (X) Restituisce il valore più basso nell'intervallo del tipo di dati ordinale X
Alta (X) Restituisce il valore più alto nell'intervallo del tipo di dati ordinale X


Ad esempio, High (Byte) restituisce 255 perché il valore più alto di tipo Byte è 255 e Succ (2) restituisce 3 perché 3 è il successore di 2.

Nota: se proviamo ad usare Succ quando all'ultimo elemento Delphi genererà a eccezione di runtime se il controllo della gamma è attivo.

Delphi Enumerated Type

Il modo più semplice per creare un nuovo esempio di un tipo ordinale è semplicemente elencare un gruppo di elementi in un certo ordine. I valori non hanno alcun significato intrinseco e la loro ordinalità segue la sequenza in cui sono elencati gli identificatori. In altre parole, un'enumerazione è un elenco di valori.

genere TWeekDays = (lunedì, martedì, mercoledì, giovedì, venerdì, sabato, domenica);

Una volta definito un tipo di dati enumerato, possiamo dichiarare che le variabili sono di quel tipo:

var SomeDay: TWeekDays;

Lo scopo principale di un tipo di dati elencato è chiarire quali dati sono programma manipolerà. Un tipo enumerato è in realtà solo un modo abbreviato di assegnare valori sequenziali alle costanti. Date queste dichiarazioni, martedì è una costante di tipo TWeekDays.

Delphi ci permette di lavorare con gli elementi in un tipo enumerato usando un indice che proviene dall'ordine in cui erano elencati. Nell'esempio precedente, lunedì in TWeekDays la dichiarazione del tipo ha l'indice 0, martedì l'indice 1 e così via. Le funzioni elencate nella tabella precedente, ad esempio, consentono di utilizzare Succ (venerdì) per "andare a" sabato.

Ora possiamo provare qualcosa di simile:

per SomeDay: = lunedì per Domenica fareSe SomeDay = Tuesday poi
ShowMessage ('Martedì lo è!');

La libreria dei componenti Visual di Delphi utilizza tipi enumerati in molti punti. Ad esempio, la posizione di un modulo è definita come segue:

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

Usiamo la posizione (tramite la finestra di ispezione degli oggetti) per ottenere o impostare le dimensioni e il posizionamento di modulo.

Sottrai i tipi

In poche parole, un tipo di sottorange rappresenta un sottoinsieme dei valori in un altro tipo ordinale. In generale, possiamo definire qualsiasi sottorange iniziando con qualsiasi tipo ordinale (incluso un tipo enumerato precedentemente definito) e usando un doppio punto:

genere TWorkDays = lunedì.. Venerdì;

Qui TWorkDays include i valori lunedì, martedì, mercoledì, giovedì e venerdì.

Questo è tutto - ora vai enumerato!

instagram story viewer