Startsidan  ▸  Texter  ▸  Teknikblogg

Anders Hesselbom

Programmerare, skeptiker, sekulärhumanist, antirasist.
Författare till bok om C64 och senbliven lantis.
Röstar pirat.

Introduktion till Delphi XE5

2014-02-24

Språket Delphi är inte skiftlägeskänsligt för nyckelord eller namn. Kompilatorn kontrollerar att konstanta värden får plats i variabeln de tilldelas till, men under körning kontrolleras inte överflöden.

Viktiga snabbtangenter:

  • F5: Breakpoint
  • F9: Kompilera och starta (Shift+Ctrl+F9 startar utan debugging)
  • Ctrl+F9: Kompilera
  • Ctrl+Shit+C: Implementera alla funktioner

Unit

En källkodsfil har filändelsen .pas och benämns som en unit (enhet). En enhet inleds med nyckelordet unit och avslutas med end. (inklusive punkten). Den minimala strukturen ser ut så här:

unit MinUnit;
interface
implementation
end.

I sektionen interface anges vilka andra enheter som enheten använder.

interface
uses
  MinAndraUnit;

Dessutom deklareras typer (nyckelordet type) och globala variabler i interface. Sektionen implementation används för att implementera funktioner.

Datatyper

Numeriska datatyper:

  • Byte: 0 – 255
  • ShortInt: -127 – 127
  • Word: 16 bit osignerad (0 – 65535)
  • SmallInt: 16 bit signerad (-32768 – 32767)
  • LongWord (eller Cardinal): 32 bit osignerad
  • LongInt (eller Integer): 32 bit signerad
  • Int64: 64 bit signerad
  • Currency: 50 tecken, fyra decimaler

Flyttal:

  • Single: 7 tecken
  • Double: 15 tecken
  • Extended: 19 tecken

Konstanter skapas utan att någon datatyp behöver anges. Notera att = vid deklaration av konstanter. Följande exempel skapar en ShortInt (A), en SmallInt (B) och en Integer (C):

const
  A = 30;
  B = 300;
  C = 300000;

Text:

  • Char (eller AnsiChar): Ett enkelt tecken
  • WideChar: Ett internationellt tecken
  • ShortString: Upp till 255 Char
  • String (eller AnsiString): Fritt antal Char
  • WideString: Fritt antal WideChar

Som strängavgränsare används apostrof (‘).

var
   s : string;
begin
   s := 'Conny Karlsson';
   writeln(copy(s, 1, 3)); //Första tecknet och tre framåt ger 'Con'
   insert('Helmer ', s, 7); //Infoga 'Helmer ' efter 'Conny '
   writeln(s); //'Conny Helmer Karlsson'
   //Byt ut Helmer till Holger.
   writeln(stringreplace(s, 'Helmer', 'Holger', [rfReplaceAll, rfIgnoreCase]));

Operatörer

Aritmetiska operatörer:

  • + (addition eller strängkonkatenering)
  • – (subtraktion)
  • * (multiplikation)
  • / (division)
  • div (heltalsdivision)
  • mod (modulus)

Logiska operatörer:

  • and (logiskt och)
  • or (logiskt eller)
  • xor (logiskt exklusivt eller)
  • not (enkel logiskt inte)

Jämförelseoperatörer:

  • = (lika med)
  • < och > (mindre än, större än)
  • <= och >= (mindre än eller lika med, större än eller lika med)
  • <> (inte lika med)

För tilldelning används := (kolon och lika med).

Typomvandling

För konvertering från tal till sträng används Str, CurrToStr, Format, IntToStr och IntToHex. Notera att Str tar en sträng som utparameter med resultatet istället för att ge resultatet i retur.

var
  i : Integer;
  s : String;
  c : Currency;
begin
  //Konvertera Integer till String med s som utparameter:
  i := 10;
  Str(i, s);
  //Konvertera Currentsy till String:
  c := 100;
  s := CurrToStr(c);

För att konvertera från sträng till tal används StrToInt, StrToIntDef (feltolerant konvertering) och StrToFloat.

var
  f : Extended;
  format : TFormatSettings;
begin
  //Konvertera String till Integer (undantagsfel vid misslyckad konvertering):
  writeln(StrToInt('500'));
  //Konvertera String till Integer (0 vid misslyckad konvertering):
  writeln(StrToIntDef('1000', 0));
  //Konvertera String till Extended (undantagsfel vid misslyckad konvertering):
  format := TFormatSettings.create;
  format.DecimalSeparator := ',';
  writeln(StrToFloat('100,5', format));

Typer

Typer deklareras i interface-sektionen i en enhet. De inleds med type följt av namn och supertyp, och avslutas med end; (notera avslutande semikolon). Detta exempel visar två typer:

type
  MinTyp = class(TObject)
  end;

type
  MinAndraTyp = class(TObject)
  end;

Supertypen TObject behöver inte anges, eftersom den antas gälla. Deklarationerna delas upp efter synlighet. Följande exempel utrustar typen Employee med två privata medlemsvariabler.

type
  Employee = class
private
  //Privata variabler
  _firstName : string;
  _lastName : string;
  end;

Förutom synlighetsnivån private finns nivåerna protected, public och published. Nivån private anger att medlemmen är lokal för objektet, protected innebär att typer som ärver från typen har tillgång till medlemmen, public innebär att alla andra objekt i samma projekt har tillgång till medlemmen, och published innebär att medlemmen dessutom är tillgänglig för object inspectorn i utvecklingsmiljön.

Funktioner

Funktioner deklareras med nyckelordet function, följt av funktionens namn, parameterlista och returtyp enligt följande:

function Namn(parameter: typ; parameter: typ) : returtyp;

Om funktionen saknar retur, används istället nyckelordet procedure.

procedure Namn(parameter: typ; parameter: typ)

Parenteserna efter namnet är inte nödvändiga om funktionen eller proceduren inte tar några parametrar. Detta exempel visar funktionen getName:

type
  Employee = class
  private
    //Privata variabler
    _firstName : string;
    _lastName : string;
    function getName : string;
  end;

Implementationerna sker i sektionen implementation. Man använder typnamn.funktionsnamn för att ange vilken funktion som implementeras. Implementationen avgränsas med begin och end; (semikolon). Det är inte obligatoriskt att skicka tillbaka ett värde, trots att man deklarerat en returtyp. För att skicka tillbaka ett värde görs en tilldelning till result.

function Employee.getName: string;
begin
  result :=  (_firstName + ' ' + _lastName);
end;

Däremot är det inte tillåtet att läsa oinitierade strängar. Ett sätt att utrusta _firstName och _lastName med värden är att implementera en konstruktor. Dessa ska enligt standarden heta create, och kan överlagras för att erbjuda flera sätt att initiera objekten.

public
  constructor create; overload;
  constructor create(firstName: string; lastName: string); overload;

Konstruktorn måste anropas uttryckligen.

e := Employee.create;

Properties

Properties är inte lika mångsidiga som i många andra språk. I Delphi anger man endast vilken medlemsvariabel som påverkas vid tilldelning till en property, och vilken som påverkas av avläsning. Syntaxen för en property är:

property namn : typ read uttryck write uttryck;

För att skapa en read only property utelämnas write uttryck, och för att skapa en read only property utelämnas write uttryck. Exempel:

type
  Point = class
  private
    _x : integer;
    _y : integer;
  public
    property x : integer read _x write _x;
    property y : integer read _y write _y;
  end;

Ett exempel

Följande exempel visar deklarationen av en klass (sektionen interface) som representerar en person. Klassen innehåller privata variabler, en privat funktion, två konstruktorer, två read/write properties samt en read only property som använder en funktion som uttryck.

type
  Employee = class
  private
    //Privata variabler
    _firstName : string;
    _lastName : string;
    function getName : string;
  public
    constructor create; overload;
    constructor create(firstName: string; lastName: string); overload;
    property firstName : string read _firstName write _firstName;
    property lastName : string read _lastName write _lastName;
    property name : string read getName;
  end;

Så här ser implementationerna ut (sektionen implementation):

constructor Employee.create;
begin
  _firstName := '';
  _lastName := '';
end;

constructor Employee.create(firstName, lastName: string);
begin
  _firstName := firstName;
  _lastName := lastName;
end;

function Employee.getName: string;
  begin
  result :=  (_firstName + ' ' + _lastName);
end;

Här följer ett exempel:

var
  e : Employee;
begin
  e := Employee.create('Sven', 'Svensson');
  writeln(e.name);

Categories: Delphi

Leave a Reply

Your email address will not be published. Required fields are marked *



En kopp kaffe!

Bjud mig på en kopp kaffe (20:-) som tack för bra innehåll!

Bjud på en kopp kaffe!

Om...

Kontaktuppgifter, med mera, finns här.

Följ mig

Twitter Instagram
GitHub RSS

Public Service

Folkbildning om public service.

Hem   |   linktr.ee/hesselbom   |   winsoft.se   |   80tal.se   |   Filmtips