Haben Sie schon einmal festgestellt, dass Sie immer wieder denselben Code geschrieben haben, um einige häufige Aufgaben in Ereignishandlern auszuführen? Ja! Es ist Zeit, dass Sie sich mit Programmen innerhalb eines Programms vertraut machen. Nennen wir diese Unterprogramme.
Unterprogramme sind ein wichtiger Bestandteil jeder Programmiersprache, und Delphi ist keine Ausnahme. In Delphi gibt es im Allgemeinen zwei Arten von Unterprogrammen: eine Funktion und eine Prozedur. Der übliche Unterschied zwischen einer Funktion und einer Prozedur besteht darin, dass eine Funktion einen Wert zurückgeben kann und eine Prozedur dies im Allgemeinen nicht tut. Eine Funktion wird normalerweise als Teil eines Ausdrucks aufgerufen.
Schauen Sie sich die folgenden Beispiele an:
Verfahren Sag Hallo(const sWas:Zeichenfolge); Start ShowMessage ('Hallo' + sWhat); Ende; Funktion Jahre alt (const Geburtsjahr: Ganzzahl): Ganzzahl; var Jahr, Monat, Tag: Word; Start DecodeDate (Datum, Jahr, Monat, Tag); Ergebnis: = Jahr - Geburtsjahr; Ende;
Einmal definierte Unterprogramme können einmal oder mehrmals aufgerufen werden:
Verfahren TForm1.Button1Click (Absender: TObject); Start SayHello ('Delphi User'); Ende; Verfahren TForm1.Button2Click (Absender: TObject); Start Sag Hallo ('Zarko Gajic'); ShowMessage ('Du bist' + IntToStr (YearsOld (1973)) + 'Jahre alt!'); Ende;
Wie wir sehen können, verhalten sich sowohl Funktionen als auch Prozeduren wie Miniprogramme. Insbesondere können sie eigene Typen, Konstanten und Variablendeklarationen enthalten.
Sehen Sie sich eine (verschiedene) SomeCalc-Funktion genauer an:
Funktion SomeCalc (const sStr: Zeichenfolge; const iJahr, iMonat: Ganzzahl; var iDay: Integer): Boolean; Start … Ende;
Jede Prozedur oder Funktion beginnt mit a Header das identifiziert die Prozedur oder Funktion und listet die Parameter Die Routine verwendet, falls vorhanden. Die Parameter sind in Klammern aufgeführt. Jeder Parameter hat einen identifizierenden Namen und normalerweise einen Typ. Ein Semikolon trennt Parameter in einer Parameterliste voneinander.
sStr, iYear und iMonth werden aufgerufen konstante Parameter. Konstante Parameter können von der Funktion (oder Prozedur) nicht geändert werden. Der iDay wird als var parameter, und wir können Änderungen daran innerhalb der Subroutine vornehmen.
Funktionen müssen, da sie Werte zurückgeben, ein Rückgabetyp am Ende des Headers deklariert. Der Rückgabewert einer Funktion ergibt sich aus der (endgültigen) Zuordnung zu ihrem Namen. Da implizit jede Funktion eine lokale Variable Result vom gleichen Typ wie der Rückgabewert der Funktionen hat, hat die Zuweisung zu Result die gleiche Wirkung wie die Zuweisung zum Namen der Funktion.
Unterprogramme werden immer im Implementierungsabschnitt der Einheit platziert. Solche Subroutinen können von einem Event-Handler oder einer Subroutine in derselben Unit aufgerufen (verwendet) werden, die danach definiert ist.
Hinweis: Die uses-Klausel einer Unit gibt an, welche Units sie aufrufen kann. Wenn wir möchten, dass eine bestimmte Unterroutine in einer Unit1 von den Ereignishandlern oder Unterroutinen in einer anderen Unit (z. B. Unit2) verwendet werden kann, müssen wir: