Slik bruker du funksjoner og prosedyrer i Delphi

Har du noen gang funnet at du skriver den samme koden om og om igjen for å utføre noen vanlige oppgaver innen hendelseshåndterere? Ja! Det er på tide at du lærer om programmer i et program. La oss kalle disse miniprogrammene underprogrammer.

Intro til subroutines

Subroutines er en viktig del av noe programmeringsspråk, ogDelphi er intet unntak. I Delphi er det vanligvis to typer subroutines: en funksjon og en prosedyre. Den vanlige forskjellen mellom en funksjon og en prosedyre er at en funksjon kan returnere en verdi, og en prosedyre vil vanligvis ikke gjøre det. En funksjon kalles normalt som en del av et uttrykk.

Ta en titt på følgende eksempler:

fremgangsmåte Si hei(konst sWhat:string); begynne
ShowMessage ('Hello' + sWhat); slutt; funksjon År gammel(konst Fødselsår: heltall): heltall; Var
År, måned, dag: ord; begynne
DecodeDate (dato, år, måned, dag); Resultat: = År - Fødselsår; slutt; 

Når subroutines er definert, kan vi kalle dem en eller flere ganger:

fremgangsmåte TForm1.Button1Click (avsender: TObject); 
instagram viewer
begynne SayHello ('Delphi-bruker'); slutt; fremgangsmåte TForm1.Button2Click (avsender: TObject); begynne SayHello ('Zarko Gajic'); ShowMessage ('Du er' + IntToStr (YearsOld (1973)) + 'år gammel!'); slutt;

Funksjoner og prosedyrer

Som vi ser, fungerer både funksjoner og prosedyrer som miniprogrammer. Spesielt kan de ha sin egen type, konstanter og variable erklæringer inni seg.

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

funksjon SomeCalc. (konst SSTR: string; konst iYear, iMonth: heltall; Var iDay: heltall): boolsk; begynne...slutt; 

Hver prosedyre eller funksjon begynner med a Overskrift som identifiserer prosedyren eller funksjonen og lister opp parametere rutinen bruker om noen. Parametrene er oppført i parentes. Hver parameter har et identifiserende navn og har vanligvis en type. Et semikolon skiller parametere i en parameterliste fra hverandre.

sStr, iYear og iMonth heter konstante parametere. Konstante parametere kan ikke endres av funksjonen (eller prosedyren). IDay blir bestått som en var parameter, og vi kan gjøre endringer i den, i subroutinen.

Funksjoner, siden de returnerer verdier, må ha en retur type erklært på slutten av overskriften. Returneringsverdien til en funksjon blir gitt av den (endelige) tildelingen til navnet. Siden hver funksjon implisitt har en lokal variabel Resultat av samme type som funksjonene returnerer verdi, har tildeling til Resultat samme effekt som tilordning til navnet på funksjonen.

Posisjonering og samtale av underrutiner

Underrutiner plasseres alltid i implementeringsdelen av enheten. Slike subroutines kan kalles (brukes) av en hendelsesbehandler eller subroutine i samme enhet som er definert etter det.

Merk: bruksbestemmelsen til en enhet forteller deg hvilke enheter den kan ringe. Hvis vi ønsker at en spesifikk subroutine i en Unit1 skal kunne brukes av hendelseshåndtererne eller subroutines i en annen enhet (si Unit2), må vi:

  • Legg til Unit1 til bruksklausulen til Unit2
  • Plasser en kopi av overskriften på underrutinen i grensesnittdelen av enheten1.

Dette betyr at subroutines hvis overskrifter er gitt i grensesnittdelen global i omfang.

Når vi kaller en funksjon (eller en prosedyre) inne i sin egen enhet, bruker vi dens navn med hva som helst parametere trengs. På en annen side, hvis vi kaller en global subroutine (definert i en annen enhet, f.eks. MyUnit), bruker vi navnet på enheten etterfulgt av en periode.

... // SayHello prosedyre er definert inne i denne enheten
SayHello ('Delphi-bruker'); // YearsOld-funksjonen er definert i MyUnit-enheten
Dummy: = MyUnit. YearsOld (1973);... 

Merk: funksjoner eller prosedyrer kan ha egne underrutiner innebygd i seg. En innebygd subroutine er lokal for beholderens subroutine og kan ikke brukes av andre deler av programmet. Noe som:

fremgangsmåte TForm1.Button1Click (avsender: TObject); funksjon Er liten(konst SSTR:string): Boolean; begynne// IsSmall returnerer sant hvis sStr er med små bokstaver, ellers falsk
Resultat: = LowerCase (sStr) = sStr; slutt; begynne// IsSmall kan bare brukes innen OnClick-hendelse i Button1hvis IsSmall (Edit1.Text) deretter
ShowMessage ('Alle små capser i Edit1.Text')
ellers
ShowMessage ('Ikke alle små capser i Edit1.Text'); slutt;
instagram story viewer