Functies en procedures gebruiken in Delphi

Heb je ooit gemerkt dat je steeds dezelfde code schrijft om een ​​veel voorkomende taak binnenin uit te voeren event handlers? Ja! Het is tijd dat je leert over programma's binnen een programma. Laten we die subprogramma's voor mini-programma's noemen.

Inleiding tot subroutines

Subroutines zijn een belangrijk onderdeel van elk programmeertaal, enDelphi is geen uitzondering. In Delphi zijn er over het algemeen twee soorten subroutines: een functie en een procedure. Het gebruikelijke verschil tussen een functie en een procedure is dat een functie een waarde kan retourneren, en een procedure zal dat in het algemeen niet doen. Een functie wordt normaal gesproken aangeroepen als onderdeel van een uitdrukking.

Bekijk de volgende voorbeelden:

procedure Zeg hallo(const sWat:draad); beginnen
ShowMessage ('Hallo' + sWhat); einde; functie Jaar oud(const BirthYear: integer): integer; var
Jaar, maand, dag: Word; beginnen
DecodeDate (datum, jaar, maand, dag); Resultaat: = Jaar - Geboortejaar; einde; 

Zodra subroutines zijn gedefinieerd, kunnen we ze een of meer keren noemen:

instagram viewer
procedure TForm1.Button1Click (Afzender: TObject); beginnen
SayHello ('Delphi-gebruiker'); einde; procedure TForm1.Button2Click (Afzender: TObject); beginnen
SayHello ('Zarko Gajic'); ShowMessage ('You are' + IntToStr (YearsOld (1973)) + 'years old!'); einde; 

Functies en procedures

Zoals we kunnen zien, werken zowel functies als procedures als miniprogramma's. Ze kunnen met name hun eigen type, constanten en declaraties van variabelen bevatten.

Bekijk een (diverse) SomeCalc-functie van dichterbij:

functie SomeCalc. (const sStr: draad; const iJaar, iMonth: geheel getal; var iDay: integer): boolean; beginnen...einde; 

Elke procedure of functie begint met een koptekst die de procedure of functie identificeert en de parameters de routine gebruikt indien aanwezig. De parameters staan ​​tussen haakjes. Elke parameter heeft een identificerende naam en heeft meestal een type. Een puntkomma scheidt parameters in een parameterlijst van elkaar.

sStr, iYear en iMonth worden genoemd constante parameters. Constante parameters kunnen niet worden gewijzigd door de functie (of procedure). De iDay wordt doorgegeven als een var parameter, en we kunnen er wijzigingen in aanbrengen, binnen de subroutine.

Functies, omdat ze waarden retourneren, moeten een retourtype verklaard aan het einde van de koptekst. De geretourneerde waarde van een functie wordt gegeven door de (eind) opdracht aan zijn naam. Aangezien elke functie impliciet een lokale variabele Result heeft van hetzelfde type als de functie return value, heeft toewijzing aan Resultaat hetzelfde effect als toewijzing aan de naam van de functie.

Subroutines positioneren en oproepen

Subroutines worden altijd in het implementatiegedeelte van de eenheid geplaatst. Dergelijke subroutines kunnen worden aangeroepen (gebruikt) door een gebeurtenishandler of subroutine in dezelfde eenheid die daarna is gedefinieerd.

Let op: de gebruiksclausule van een eenheid vertelt je welke eenheden hij kan aanroepen. Als we willen dat een specifieke subroutine in een Unit1 bruikbaar is door de event handlers of subroutines in een andere unit (zeg Unit2), moeten we:

  • Voeg Unit1 toe aan de gebruiksclausule van Unit2
  • Plaats een kopie van de koptekst van de subroutine in het interfacegedeelte van de Unit1.

Dit betekent dat subroutines waarvan de headers worden gegeven in de interface sectie zijn globaal van opzet.

Wanneer we een functie (of een procedure) binnen zijn eigen eenheid aanroepen, gebruiken we de naam met wat dan ook parameters zijn nodig. Aan de andere kant, als we een globale subroutine aanroepen (gedefinieerd in een andere eenheid, bijvoorbeeld MyUnit), gebruiken we de naam van de eenheid gevolgd door een punt.

... // SayHello-procedure is gedefinieerd binnen dit toestel
SayHello ('Delphi-gebruiker'); // YearsOld functie is gedefinieerd binnen MyUnit-eenheid
Dummy: = MyUnit. YearsOld (1973);... 

Opmerking: functies of procedures kunnen hun eigen subroutines bevatten. Een ingesloten subroutine is lokaal in de container-subroutine en kan niet worden gebruikt door andere delen van het programma. Zoiets als:

procedure TForm1.Button1Click (Afzender: TObject); functie Is klein(const sStr:draad): boolean; beginnen// IsSmall retourneert True als sStr in kleine letters staat, anders False
Resultaat: = LowerCase (sStr) = sStr; einde; beginnen// IsSmall kan alleen worden gebruikt binnen de Button1 OnClick-gebeurtenisals IsSmall (Edit1.Text) vervolgens
ShowMessage ('Alle kleine hoofdletters in Edit1.Text')
anders
ShowMessage ('Niet alle kleine hoofdletters in Edit1.Text'); einde;
instagram story viewer