vor

Objektorientierte Programmierung mit Object-Pascal

weiter

4.10 Prozeduren und Funktionen

Komplexe Probleme lassen sich übersichtlich in kleinere Teilprobleme aufspalten. Dazu eignen sich Funktionen und Prozeduren. Eine Prozedur oder Funktion wird über ihren Namen angesprochen. Prozeduren/Funktionen sind Zusammenfassungen von Anweisungen, die im Hauptprogramm oder einer anderen Prozedur/Funktion möglicherweise oft gleichartig vorkommen, an die Werte übergeben werden können und die Werte weitergeben können.

Eine Prozedurdefinition beginnt mit der Prozedurdeklaration. Sie beginnt mit dem Schlüsselwort "procedure". Dahinter folgt der Name der Prozedur, evtl. gefolgt von der Angabe der formalen Parameter in runden Klammern.
Die formalen Parameter (mit ihrem Datentyp hinter einem Doppelpunkt) sind durch Komma getrennt. Es gibt zwei Arten. Steht ein "var" vor dem Parameter, dann handelt es sich um einen Referenzparameter, sonst ist es ein Wertparameter. Wertparameter verändern nichts im Hauptprogramm. Referenzparameter nutzen (und verändern) gleichnamige Variablen im Hauptprogramm.

Hier ein ganz einfaches Beispiel:

implementation

{$R *.DFM}

procedure Ruf;
begin
  ShowMessage('Es klappt!');
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
  Ruf;
end;

end.



Funktionen können ein (oder mehrere) Argument(e) haben und geben einen einzigen Wert weiter.
Eine Funktionsdefinition beginnt mit der Funktionsdeklaration. Sie beginnt mit dem Schlüsselwort "function". Dahinter folgt der Name der Funktion, gefolgt von der Angabe der formalen Parameter in runden Klammern.
Die formalen Parameter (mit ihrem Datentyp hinter einem Doppelpunkt) sind durch Komma getrennt. Es gibt zwei Arten. Steht ein "var" vor dem Parameter, dann handelt es sich um einen Referenzparameter, sonst ist es ein Wertparameter. Wertparameter verändern nichts im Hauptprogramm. Referenzparameter nutzen (und verändern) gleichnamige Variablen im Hauptprogramm.
Hinter der runden Klammer steht nach einem Doppelpunkt der Datentyp des Wertes, den die Funktion liefern soll.

implementation

{$R *.DFM}

function Doppelt(a: Integer): Integer;

begin
  Doppelt := a * 2;
end;


Nach der Funktionsdeklaration können hinter "var" Variablen deklariert werden.
Die Arbeitsweise der Funktion wird im Funktionsrumpf festgelegt, der zwischen "begin" und "end" eingeschlossen wird.

Hier ein Beispiel für eine etwas umfangreichere Funktion (Fakultät von n):

implementation

{$R *.DFM}

function Fak(n: Integer): LongInt;

var i: Integer;

begin
  Fak := 1;
  for i := 1 to n do Fak := Fak * i;
end;



Hier ein Beispiel für eine etwas umfangreichere Prozedur
(Zwei Integer-Variable a und b werden mit Tausch(a,b); eingegeben und mit vertauschten Inhalten wieder ausgegeben.):

implementation

{$R *.DFM}

procedure Tausch(var x,y: Integer);

var hilf: Integer;

begin
  hilf := x;
  x := y;
  y := hilf;
end;



Besonderheit von Funktionen gegenüber Prozeduren:

  • Der Typ des Resultatwertes wird bei Funktionen hinter der Parameterliste vereinbart.
  • Im Funktionskörper muss einer Variablen mit den Namen der Funktion ein Wert des entsprechenden Typs zugewiesen werden.
  • Der Funktionsaufruf erfolgt innerhalb eines Ausdrucks, während eine Prozedur alleine eine Anweisung sein kann.
  • Eine Funktion benutzt man immer dann, wenn ein Wert zu berechnen ist. Das ist guter Programmierstil(, denn eigentlich könnte man alles mit Prozeduren machen).


Ein Beispiel für die Nutzung einer Prozedur ist Verschlüsselung bei den Beispielen für IF - THEN.

Delphi bietet bereits eine große Anzahl vordefinierter Funktionen und Prozeduren: z. B. FloatToStr(), IntToStr(), Trunc() usw.. Einige davon erkläre ich im Kapitel Nützliche Funktionen und Prozeduren.


vor

Inhaltsverzeichnis

weiter