Sådan bruges funktioner og procedurer i Delphi

Har du nogensinde fundet dig selv at skrive den samme kode igen og igen for at udføre en fælles opgave inden for begivenhedshåndterere? Ja! Det er tid for dig at lære om programmer inden for et program. Lad os kalde disse mini-programmer underprogrammer.

Introduktion til subroutiner

Subroutiner er en vigtig del af enhver programmeringssprog, ogDelphi er ingen undtagelse. I Delphi er der generelt to typer subroutines: en funktion og en procedure. Den sædvanlige forskel mellem en funktion og en procedure er, at en funktion kan returnere en værdi, og en procedure vil generelt ikke gøre det. En funktion kaldes normalt som en del af et udtryk.

Se på følgende eksempler:

procedure Sig hej(const sWhat:snor); begynde
ShowMessage ('Hello' + sWhat); ende; fungere År gammel(const Fødselsår: heltal): heltal; Var
År, måned, dag: ord; begynde
DecodeDate (dato, år, måned, dag); Resultat: = År - Fødselsår; ende; 

Når subroutiner er defineret, kan vi kalde dem en eller flere gange:

procedure TForm1.Button1Click (Afsender: TObject); 
instagram viewer
begynde SayHello ('Delphi-bruger'); ende; procedure TForm1.Button2Click (Afsender: TObject); begynde SayHello ('Zarko Gajic'); ShowMessage ('Du er' + IntToStr (YearsOld (1973)) + 'år gammel!'); ende;

Funktioner og procedurer

Som vi kan se, fungerer både funktioner og procedurer som mini-programmer. Især kan de have deres egen type, konstanter og variable erklæringer inde i dem.

Se nærmere på en (diverse) SomeCalc-funktion:

fungere SomeCalc. (const SSTR: snor; const iYear, iMonth: heltal; Var iDay: heltal): boolsk; begynde...ende; 

Hver procedure eller funktion begynder med a header der identificerer proceduren eller funktionen og viser listen over parametre rutinen bruger, hvis nogen. Parametrene er anført i parenteser. Hver parameter har et identificerende navn og har normalt en type. En semikolon adskiller parametre i en parameterliste fra hinanden.

sStr, iYear og iMonth kaldes konstante parametre. Konstante parametre kan ikke ændres af funktionen (eller proceduren). IDay sendes som en var parameter, og vi kan foretage ændringer i det, inden i subroutinen.

Funktioner, da de returnerer værdier, skal have en retur type erklæret i slutningen af ​​overskriften. En funktions returværdi gives ved (endelig) tildeling til dens navn. Da hver funktion implicit har en lokal variabel Resultat af samme type som funktionerne returnerer værdien, har tildeling til Resultat den samme effekt som tildeling til navnet på funktionen.

Positionering og opkald af underprogrammer

Subroutiner placeres altid i enhedens implementeringsafdeling. Sådanne subroutines kan kaldes (bruges) af en begivenhedsadministrator eller subroutine i den samme enhed, der er defineret efter det.

Bemærk: brugsklausulen for en enhed fortæller dig, hvilke enheder den kan ringe til. Hvis vi ønsker, at en bestemt subroutine i en enhed1 skal kunne bruges af hændelsesudviklere eller subroutiner i en anden enhed (f.eks. Enhed2), skal vi:

  • Føj Unit1 til brugsklausulen i Unit2
  • Placer en kopi af overskriften på underrutinen i interfaceafsnittet på enheden1.

Dette betyder, at subroutiner, hvis overskrifter er givet i interface-sektionen, er global i omfang.

Når vi kalder en funktion (eller en procedure) inde i sin egen enhed, bruger vi dens navn med hvad som helst parametre er nødvendige. På den anden side, hvis vi kalder en global subroutine (defineret i en anden enhed, f.eks. MyUnit), bruger vi navnet på enheden efterfulgt af en periode.

... // SayHello-proceduren er defineret i denne enhed
SayHello ('Delphi-bruger'); // YearsOld-funktion er defineret i MyUnit-enheden
Dummy: = MyUnit. YearsOld (1973);... 

Bemærk: Funktioner eller procedurer kan have deres egne underprogrammer indlejret inde i dem. En indlejret subroutine er lokal til containersubutinen og kan ikke bruges af andre dele af programmet. Noget som:

procedure TForm1.Button1Click (Afsender: TObject); fungere Er lille(const SSTR:snor): Boolean; begynde// IsSmall returnerer sandt, hvis sStr er med små bogstaver, ellers falsk
Resultat: = LowerCase (sStr) = sStr; ende; begynde// IsSmall kan kun bruges i Button1 OnClick-begivenhedhvis IsSmall (Edit1.Text) derefter
ShowMessage ('Alle små kasketter i Edit1.Text')
andet
ShowMessage ('Ikke alle små kasketter i Edit1.Text'); ende;