Hur man använder funktioner och procedurer i Delphi

click fraud protection

Har du någonsin hittat dig själv skriva samma kod om och om igen för att utföra några vanliga uppgifter inom evenemangshanterare? ja! Det är dags för dig att lära dig om program inom ett program. Låt oss kalla dessa miniprograms subutrustningar.

Introduktion till subroutiner

Subroutiner är en viktig del av något programmeringsspråk, ochDelphi är inget undantag. I Delphi finns det i allmänhet två typer av subroutiner: en funktion och en procedur. Den vanliga skillnaden mellan en funktion och en procedur är att en funktion kan returnera ett värde, och en procedur kommer i allmänhet inte att göra det. En funktion kallas normalt som en del av ett uttryck.

Titta på följande exempel:

procedur Säg hej(const sWHAT:sträng); Börja
ShowMessage ('Hej' + sWhat); slutet; fungera År gammal(const Födelseår: heltal): heltal; var
År, månad, dag: Word; Börja
DecodeDate (Datum, år, månad, dag); Resultat: = År - Födelseår; slutet; 

När subroutiner har definierats kan vi kalla dem en eller flera gånger:

procedur
instagram viewer
TForm1.Button1Click (avsändare: TObject); Börja SayHello ('Delphi-användare'); slutet; procedur TForm1.Button2Click (avsändare: TObject); Börja SayHello ('Zarko Gajic'); ShowMessage ('Du är' + IntToStr (YearsOld (1973)) + 'år gammal!'); slutet;

Funktioner och procedurer

Som vi ser fungerar både funktioner och procedurer som miniprogram. I synnerhet kan de ha sin egen typ, konstanter och variabla förklaringar inuti sig.

Titta närmare på en (diverse) SomeCalc-funktion:

fungera SomeCalc. (const SSTR: sträng; const iYear, iMonth: heltal; var iDay: heltal): boolean; Börja...slutet; 

Varje procedur eller funktion börjar med a rubrik som identifierar proceduren eller funktionen och visar listan parametrar rutinen använder om någon. Parametrarna listas inom parentes. Varje parameter har ett identifierande namn och har vanligtvis en typ. En semikolon skiljer parametrar i en parameterlista från varandra.

sStr, iYear och iMonth kallas konstanta parametrar. Konstanta parametrar kan inte ändras med funktionen (eller proceduren). IDay skickas som en var parameter, och vi kan göra ändringar i den, inom subrutinen.

Funktioner, eftersom de returnerar värden, måste ha en returtyp deklareras i slutet av rubriken. Returvärdet för en funktion ges av den (slutliga) tilldelningen till dess namn. Eftersom varje funktion implicit har en lokal variabel Resultat av samma typ som funktionerna returnerar värde har tilldelning till resultat samma effekt som tilldelning till namnet på funktionen.

Positionering och uppringning av subroutiner

Subroutiner placeras alltid i enhetens implementeringsdel. Sådana subroutiner kan kallas (används) av en händelseshanterare eller subroutine i samma enhet som definieras efter det.

Obs! Användningsklausulen för en enhet berättar vilka enheter den kan ringa. Om vi ​​vill att en specifik subroutine i en enhet1 ska kunna användas av händelseshanterarna eller subroutinerna i en annan enhet (säg enhet2), måste vi:

  • Lägg till Unit1 till användningsklausulen i Unit2
  • Placera en kopia av rubriken på underrutinen i gränssnittsavsnittet för enheten1.

Detta innebär att subroutiner vars rubriker anges i gränssnittsavsnittet är global i omfattning.

När vi kallar en funktion (eller en procedur) i sin egen enhet, använder vi dess namn med vad som helst parametrar är behövda. Å andra sidan, om vi kallar en global subroutine (definierad i någon annan enhet, t.ex. MyUnit), använder vi namnet på enheten följt av en period.

... // SayHello-proceduren definieras i den här enheten
SayHello ('Delphi-användare'); // YearsOld-funktionen definieras i MyUnit-enheten
Dummy: = MyUnit. YearsOld (1973);... 

Obs! Funktioner eller procedurer kan ha sina egna subroutiner inbäddade inuti dem. En inbäddad subrutin är lokal för behållarsubroutinen och kan inte användas av andra delar av programmet. Något liknande:

procedur TForm1.Button1Click (avsändare: TObject); fungera Är liten(const SSTR:sträng): Boolean; Börja// IsSmall returnerar sant om sStr är med små bokstäver, falskt annars
Resultat: = LowerCase (sStr) = sStr; slutet; Börja// IsSmall kan bara användas inom Button1 OnClick-händelseom IsSmall (Edit1.Text) sedan
ShowMessage ('Alla små kepsar i Edit1.Text')
annan
ShowMessage ('Inte alla små kepsar i Edit1.Text'); slutet;
instagram story viewer