Delphis programmeringsspråk är ett exempel på ett starkt typspråk. Detta betyder att alla variabler måste vara av någon typ. En typ är i huvudsak ett namn för en typ av data. När vi förklarar en variabel måste vi ange dess typ, som bestämmer den uppsättning värden som variabeln kan innehålla och de operationer som kan utföras på den.
Många av Delphis inbyggda datatyper, som heltal eller Sträng, kan förfinas eller kombineras för att skapa nya datatyper. I den här artikeln ser vi hur du skapar anpassade ordinära datatyper i Delphi.
Vanliga typer
De definierande egenskaperna för ordinära datatyper är: de måste bestå av ett begränsat antal element och de måste beställas på något sätt.
De vanligaste exemplen på ordinära datatyper är alla heltalstyper samt Char och Boolean typ. Mer exakt har Object Pascal 12 fördefinierade ordinaltyper: heltal, Shortint, Smallint, Longint, Byte, Word, Cardinal, Boolean, ByteBool, WordBool, LongBool och Char. Det finns också två andra klasser av användardefinierade ordinaltyper: uppräknade typer och subrange-typer.
I alla ordinära typer måste det vara meningsfullt att gå bakåt eller framåt till nästa element. Exempelvis är verkliga typer inte ordinära eftersom det inte är vettigt att röra sig bakåt eller framåt. Frågan "Vad är nästa verkliga efter 2,5?" är meningslös.
Eftersom, per definition, varje värde utom det första har en unik föregångare och varje värde förutom den sista har en unik efterföljare, flera fördefinierade funktioner används när man arbetar med ordinära typer:
Fungera | Effekt |
Ord (X) | Ger elementets index |
Pred (X) | Går till det element som anges före X i typen |
Succ (X) | Går till elementet som anges efter X i typen |
Dec (X; n) | Flyttar n element tillbaka (om n är utelämnad flyttar 1 element tillbaka) |
Inc (X; n) | Flyttar n element framåt (om n är utelämnad flyttar 1 element framåt) |
Låg (X) | Returnerar det lägsta värdet i intervallet för ordinär datatyp X |
Hög (X) | Returnerar det högsta värdet i intervallet för den ordinära datatypen X |
Exempelvis returnerar High (Byte) 255 eftersom det högsta värdet av typen Byte är 255, och Succ (2) returnerar 3 eftersom 3 är efterföljaren av 2.
Obs: Om vi försöker använda Succ när Delphi vid det sista elementet genererar en undantag för körning om intervallkontrollen är på.
Delphi Enumerated Type
Det enklaste sättet att skapa ett nytt exempel på en ordinär typ är helt enkelt att lista en massa element i någon ordning. Värdena har ingen inneboende betydelse, och deras ordalitet följer den sekvens där identifierarna är listade. Med andra ord är en uppräkning en lista över värden.
typ TWeekDays = (måndag, tisdag, onsdag, torsdag, fredag, lördag, söndag);
När vi definierar en uppräknad datatyp kan vi förklara variabler till att vara av den typen:
var SomeDay: TWeekDays;
Det primära syftet med en uppräknad datatyp är att klargöra vilka uppgifter du har program kommer att manipulera. En uppräknad typ är egentligen bara ett kort sätt att tilldela sekvensvärden till konstanter. Med tanke på dessa förklaringar är tisdagen en konstant typ TWeekDays.
Delphi tillåter oss att arbeta med elementen i en uppräknad typ med ett index som kommer från den ordning som de listades i. I föregående exempel, måndag i TWeekDays typdeklaration har index 0, tisdag har index 1, och så vidare. Funktionerna i tabellen före låter oss till exempel använda Succ (fredag) för att "gå till" lördag.
Nu kan vi prova något som:
för SomeDay: = Måndag till söndag doom SomeDay = tisdag sedan ShowMessage ('Tisdag är det!');
Delphi Visual Component Library använder uppräknade typer på många ställen. Exempelvis definieras en formulärs position på följande sätt:
TPosition = (poDesigned, poDefault, poDefaultPosOnly, poDefaultSizeOnly, poScreenCenter);
Vi använder Position (genom Objektinspektören) för att få eller ställa in storlek och placering av form.
Subrange typer
Enkelt uttryckt representerar en subrange-typ en delmängd av värdena i en annan ordinär typ. I allmänhet kan vi definiera vilken subrange som helst genom att börja med någon ordinal typ (inklusive en tidigare definierad uppräknad typ) och använda en dubbel punkt:
typ TWorkDays = måndag.. Fredag;
Här inkluderar TWorkDays värdena måndag, tisdag, onsdag, torsdag och fredag.
Det är allt - nu räkna upp!