Delphi's programmeertaal is een voorbeeld van een sterk getypeerde taal. Dit betekent dat alle variabelen van een bepaald type moeten zijn. Een type is in wezen een naam voor een soort gegevens. Wanneer we een variabele declareren, moeten we het type specificeren, dat de reeks waarden bepaalt die de variabele kan bevatten en de bewerkingen die erop kunnen worden uitgevoerd.
Veel van de ingebouwde gegevenstypen van Delphi, zoals Integer of Draad, kan worden verfijnd of gecombineerd om nieuwe gegevenstypen te creëren. In dit artikel zullen we zien hoe u aangepaste ordinale gegevenstypen kunt maken Delphi.
Normale typen
De bepalende kenmerken van ordinale gegevenstypen zijn: ze moeten bestaan uit een eindig aantal elementen en ze moeten op een of andere manier worden geordend.
De meest voorkomende voorbeelden van ordinale gegevenstypen zijn alle typen Integer, Char en Boolean type. Om precies te zijn, Object Pascal heeft 12 vooraf gedefinieerde ordinale typen: Integer, Shortint, Smallint, Longint, Byte, Word, Cardinal, Boolean, ByteBool, WordBool, LongBool en Char. Er zijn ook twee andere klassen van door de gebruiker gedefinieerde ordinale typen: opgesomde typen en subbereiktypen.
Bij alle ordinale typen moet het logisch zijn om achteruit of vooruit te gaan naar het volgende element. Echte typen zijn bijvoorbeeld niet ordinaal omdat achteruit of vooruit gaan niet logisch is. De vraag "Wat is de volgende echte na 2.5?" is zinloos.
Aangezien, per definitie, elke waarde behalve de eerste een unieke voorganger heeft en elke waarde behalve de laatste een unieke opvolger heeft, zijn er verschillende vooraf gedefinieerde functies worden gebruikt bij het werken met ordinale typen:
Functie | Effect |
Ord (X) | Geeft de index van het element |
Pred (X) | Gaat naar het element voor X in het type |
Succ (X) | Gaat naar het element vermeld na X in het type |
Dec (X; n) | Verplaatst n elementen terug (als n is weggelaten, verplaatst 1 element terug) |
Inc (X; n) | Verplaatst n elementen naar voren (als n is weggelaten, gaat 1 element vooruit) |
Laag (X) | Retourneert de laagste waarde in het bereik van het ordinale gegevenstype X |
Hoog (X) | Retourneert de hoogste waarde in het bereik van het ordinale gegevenstype X |
Hoog (Byte) retourneert bijvoorbeeld 255 omdat de hoogste waarde van het type Byte 255 is en Succ (2) retourneert 3 omdat 3 de opvolger is van 2.
Opmerking: als we Succ proberen te gebruiken wanneer Delphi bij het laatste element een run-time uitzondering als de bereikcontrole is ingeschakeld.
Delphi opgesomd type
De eenvoudigste manier om een nieuw voorbeeld van een ordinaal type te maken, is door simpelweg een aantal elementen in een bepaalde volgorde op te sommen. De waarden hebben geen inherente betekenis en hun rangorde volgt de volgorde waarin de identificaties worden vermeld. Met andere woorden, een opsomming is een lijst met waarden.
type TWeekDays = (maandag, dinsdag, woensdag, donderdag, vrijdag, zaterdag, zondag);
Zodra we een opgesomd gegevenstype hebben gedefinieerd, kunnen we variabelen van dat type verklaren:
var SomeDay: TWeekDays;
Het belangrijkste doel van een opgesomd gegevenstype is om duidelijk te maken welke gegevens uw zijn programma zal manipuleren. Een opgesomd type is eigenlijk slechts een verkorte manier om opeenvolgende waarden aan constanten toe te wijzen. Gezien deze verklaringen is dinsdag een constante van het type TWeekDays.
Delphi stelt ons in staat om met de elementen in een opgesomd type te werken met behulp van een index die afkomstig is van de volgorde waarin ze werden vermeld. In het vorige voorbeeld, maandag in de TWeekDays type verklaring heeft de index 0, dinsdag heeft de index 1, enzovoort. Met de functies die in de tabel zijn vermeld, kunnen we bijvoorbeeld Succ (vrijdag) gebruiken om "naar" te gaan op zaterdag.
Nu kunnen we zoiets proberen:
voor SomeDay: = maandag naar zondag Doenals SomeDay = dinsdag vervolgens ShowMessage ('dinsdag is het!');
De Delphi Visual Component Library gebruikt op veel plaatsen opgesomde typen. Zo wordt de positie van een formulier als volgt gedefinieerd:
TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter);
We gebruiken Positie (via de Object Inspector) om de grootte en plaatsing van de te krijgen of in te stellen het formulier.
Soorten subreeksen
Simpel gezegd, een subbereiktype vertegenwoordigt een subset van de waarden in een ander ordinaal type. Over het algemeen kunnen we elk subbereik definiëren door te beginnen met elk ordinaal type (inclusief een eerder gedefinieerd opgesomd type) en met behulp van een dubbele punt:
type TWorkDays = maandag.. Vrijdag;
Hier omvat TWorkDays de waarden maandag, dinsdag, woensdag, donderdag en vrijdag.
Dat is alles - ga nu opsommen!