Heb je ooit ontdekt dat je steeds opnieuw dezelfde code schrijft om een veelvoorkomende taak uit te voeren binnen event-handlers? Ja! Het is tijd voor u om te leren over programma's binnen een programma. Laten we die miniprogramma's subroutines noemen.
Subroutines zijn een belangrijk onderdeel van elke programmeertaal en Delphi 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 meestal niet. Een functie wordt normaal genoemd als onderdeel van een uitdrukking.
Bekijk de volgende voorbeelden:
procedure Zeg hallo(const sWhat:draad); beginnen ShowMessage ('Hallo' + sWhat); einde; functie Jaar oud(const BirthYear: integer): integer; var Jaar, maand, dag: Woord; beginnen DecodeDate (datum, jaar, maand, dag); Resultaat: = jaar - geboortejaar; einde;
Nadat subroutines zijn gedefinieerd, kunnen we ze een of meerdere keren aanroepen:
procedure TForm1.Button1Click (Sender: TObject); beginnen SayHello ('Delphi User'); einde; procedure TForm1.Button2Click (Sender: TObject); beginnen SayHello ('Zarko Gajic'); ShowMessage ('You are' + IntToStr (YearsOld (1973)) + 'years old!'); einde;
Zoals we kunnen zien, werken zowel functies als procedures als miniprogramma's. In het bijzonder kunnen ze hun eigen type, constanten en variabele verklaringen in zich hebben.
Bekijk een (diverse) SomeCalc-functie van naderbij:
functie SomeCalc (const SSTR: draad; const iYear, iMonth: geheel getal; var iDay: geheel getal): boolean; beginnen ... einde;
Elke procedure of functie begint met een hoofd die de procedure of functie identificeert en de lijst weergeeft 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 retour type verklaard aan het einde van de koptekst. De retourwaarde van een functie wordt gegeven door de (laatste) toewijzing aan zijn naam. Aangezien elke functie impliciet een lokale variabele Resultaat van hetzelfde type heeft als de functie-retourwaarde, heeft toewijzen aan Resultaat hetzelfde effect als toewijzen aan de naam van de functie.
Subroutines worden altijd in het implementatiegedeelte van de eenheid geplaatst. Dergelijke subroutines kunnen worden genoemd (gebruikt) door een gebeurtenishandler of subroutine in dezelfde eenheid die erna wordt gedefinieerd.
Opmerking: de gebruiksclausule van een eenheid vertelt u welke eenheden deze kan oproepen. Als we willen dat een specifieke subroutine in een Unit1 bruikbaar is voor de event-handlers of subroutines in een andere eenheid (zeg Unit2), moeten we: