Hallo!
Der Unterschied zwischen einer Prozedur und einer Funktion ist ganz einfach: eine Funktion gibt einen Wert zurück, nachdem sie ihren Code durchlaufen hat und eine Prozedur tut dies nicht.
Ein Beispiel:
Delphi-Quelltext
1: 2: 3: 4:
| function multiply (a,b : INTEGER) : INTEGER; begin result := a*b; end; |
Diese Funktion multipliziert die Parameter a und b und gibt das Ergebnis zurück. Die kann man so benutzen:
Delphi-Quelltext
1: 2: 3: 4:
| VAR a,b,c : INTEGER; begin c := multiply(a,b); end; |
Mit einer Prozedur geht das nicht, da diese keinen Wert zurück gibt (der letzte ": INTEGER" fehlt sozusagen).
Call-by-Value und Call-by-Reference bezieht sich auf die Parameter, welche eine Funktion oder Prozedur erhält. Du kannst entweder den Wert übergeben (also z.B. 5) oder Du kannst die Variable (also z.B. a : INTEGER). Der Unterschied: wenn Du bei letzterem in der Funktion / Prozedur auf die übergebene Variable zugreift, so hat das auch Auswirkungen auf den Wert der Variable in dem Programmteil, welcher die Funktion / Prozedur aufgerufen hat.
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure nummer1(a, b : INTEGER; VAR c: Integer); begin c := a*b; end;
procedure TForm1.Button1Click(Sender: TObject); VAR c : INTEGER; begin nummer1(3,5,c); label1.caption := IntToStr(c); end; |
Nach dem Aufruf von nummer1 hat die Variable c
in Button1Click den Wert 15. Heißt: durch die Operation in nummer1 hat sich die Variable auch in Button1Click geändert - Call-by-Reference.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure nummer2(a,b : INTEGER; c : INTEGER); begin c:= a*b; end;
procedure TForm1.Button1Click(Sender: TObject); VAR c : INTEGER; begin nummer2(3,5,c); label1.caption := IntToStr(c); end; |
Nach dem Aufruf von nummer2 hat die Variable c in Button1Click immer noch den gleichen (undefinierten da nicht initialisierten) Wert - Call-By-Value.
So, ich hoffe, ich konnte Dir etwas helfen.
MfG
peter
//edit: mist, zu langsam
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".