Computerwissenschaften

Verwendung von Funktionen und Prozeduren in Delphi

Haben Sie jemals festgestellt, dass Sie immer wieder denselben Code schreiben, um eine allgemeine Aufgabe in Ereignishandlern auszuführen ? Ja! Es ist Zeit für Sie, sich über Programme innerhalb eines Programms zu informieren. Nennen wir diese Unterprogramme für Miniprogramme.

 

Einführung in Unterprogramme

Subroutinen 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:

 procedure SayHello(const sWhat:string) ;
begin
ShowMessage('Hello ' + sWhat) ;
end;
function YearsOld(const BirthYear:integer): integer;
var
Year, Month, Day : Word;
begin
DecodeDate(Date, Year, Month, Day) ;
Result := Year - BirthYear;
end; 

Sobald Unterprogramme definiert wurden, können wir sie ein- oder mehrmals aufrufen:

 procedure TForm1.Button1Click(Sender: TObject) ;
begin
SayHello('Delphi User') ;
end;
procedure TForm1.Button2Click(Sender: TObject) ;
begin
SayHello('Zarko Gajic') ;
ShowMessage('You are ' + IntToStr(YearsOld(1973)) + ' years old!') ;
end; 

 

Funktionen und Verfahren

Wie wir sehen können, wirken sowohl Funktionen als auch Prozeduren wie Miniprogramme. Insbesondere können sie ihren eigenen Typ, ihre eigenen Konstanten und Variablendeklarationen enthalten.

Schauen Sie sich eine (verschiedene) SomeCalc-Funktion genauer an:

 function SomeCalc
(const sStr: string;
const iYear, iMonth: integer;
var iDay:integer): boolean;
begin
...
end; 

Jede Prozedur oder Funktion beginnt mit einem Header , der die Prozedur oder Funktion identifiziert und die Parameter auflistet, die die Routine gegebenenfalls verwendet. 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 als konstante Parameter bezeichnet . Konstante Parameter können von der Funktion (oder Prozedur) nicht geändert werden. Der iDay wird als var-Parameter übergeben , und wir können ihn innerhalb des Unterprogramms ändern.

Da Funktionen Werte zurückgeben, muss am Ende des Headers ein Rückgabetyp deklariert sein. Der Rückgabewert einer Funktion ergibt sich aus der (endgültigen) Zuordnung zu ihrem Namen. Da jede Funktion implizit eine lokale Variable Result vom gleichen Typ wie der Funktionsrückgabewert hat, hat die Zuweisung zu Result den gleichen Effekt wie die Zuweisung zum Namen der Funktion.

 

Unterprogramme positionieren und aufrufen

Unterprogramme werden immer im Implementierungsabschnitt der Einheit platziert. Solche Unterroutinen können von einem Ereignishandler oder einer Unterroutine in derselben Einheit aufgerufen (verwendet) werden, die danach definiert ist.

Hinweis: Die Verwendungsklausel einer Einheit gibt an, welche Einheiten sie aufrufen kann. Wenn eine bestimmte Unterroutine in einer Einheit1 von den Ereignishandlern oder Unterroutinen in einer anderen Einheit (z. B. Einheit2) verwendet werden soll, müssen wir:

  • Fügen Sie Unit1 zur Verwendungsklausel von Unit2 hinzu
  • Platzieren Sie eine Kopie der Kopfzeile des Unterprogramms im Schnittstellenbereich von Unit1.

Dies bedeutet, dass Unterprogramme, deren Überschriften im Schnittstellenabschnitt angegeben sind, einen globalen Gültigkeitsbereich haben .

Wenn wir eine Funktion (oder eine Prozedur) in einer eigenen Einheit aufrufen, verwenden wir ihren Namen mit den erforderlichen Parametern. Wenn wir andererseits eine globale Unterroutine aufrufen (definiert in einer anderen Einheit, z. B. MyUnit), verwenden wir den Namen der Einheit, gefolgt von einem Punkt.

 ...
//SayHello procedure is defined inside this unit
SayHello('Delphi User') ;
//YearsOld function is defined inside MyUnit unit
Dummy := MyUnit.YearsOld(1973) ;
... 

Hinweis: In Funktionen oder Prozeduren können eigene Unterprogramme eingebettet sein. Eine eingebettete Unterroutine ist lokal für die Container-Unterroutine und kann nicht von anderen Teilen des Programms verwendet werden. So etwas wie:

 procedure TForm1.Button1Click(Sender: TObject) ;
function IsSmall(const sStr:string):boolean;
begin
//IsSmall returns True if sStr is in lowercase, False otherwise
Result:=LowerCase(sStr)=sStr;
end;
begin
//IsSmall can only be uses inside Button1 OnClick event
if IsSmall(Edit1.Text) then
ShowMessage('All small caps in Edit1.Text')
else
ShowMessage('Not all small caps in Edit1.Text') ;
end;

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.