Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Procedures und Functions


navarro2010 - So 22.05.11 12:17
Titel: Procedures und Functions
Hallo,
kann mir jemand den Unterschied zwischen Procedures und Functions erklären?
Danke für eure Hilfe


Moderiert von user profile iconMartok: Topic aus Multimedia / Grafik verschoben am So 22.05.2011 um 13:06


jaenicke - So 22.05.11 12:19

Eine Prozedur bekommt ggf. Parameter, hat aber keinen Rückgabewert während eine Funktion einen Rückgabewert hat.


Regan - So 22.05.11 12:21

Und um etwas Quelltext anzufügen:

Delphi-Quelltext
1:
2:
3:
4:
procedure AA(i: String);
begin
{...}
end;


Delphi-Quelltext
1:
2:
3:
4:
5:
function AA(i: String)String;
begin
{...}
result:=i;
end;


navarro2010 - So 22.05.11 12:47

Danke, aber was bringt ein Rückgabewert überhaupt und welche Vorteile haben Functions gegenüber Procedures, bzw. wann ist es besser Functions anstatt Procedures anzuwenden?


Regan - So 22.05.11 12:56

user profile iconnavarro2010 hat folgendes geschrieben Zum zitierten Posting springen:
Danke, aber was bringt ein Rückgabewert überhaupt

Nehmen wir an, du hättest eine Funktion, die Integerzahlen in Strings umwandelt. Nennen wir diese Funktion einfach IntToStr. Dann würde die Funktion so aussehen:

Delphi-Quelltext
1:
2:
3:
4:
5:
function IntToStr(i: Integer):String
begin
  {...}
  result:=convertedString;
end;

Wenn du diese Funktion nun mehrere Male in deinem Programm brauchst, dann kannst du diese Konvertierung einfach dann immer aufrufen.

Funktionen immer dann anwenden, wenn du einen Rückgabewert brauchst (z. B. bei Umwandlungen oder wenn du z. B. bestimmte Zeichen aus einem String rauswerfen möchtest oder eine komplizierte Formel ständig berechnest). Bei dem Rest dann Prozeduren ;)


beastofchaos - So 22.05.11 13:00

user profile iconnavarro2010 hat folgendes geschrieben Zum zitierten Posting springen:
Danke, aber was bringt ein Rückgabewert überhaupt und welche Vorteile haben Functions gegenüber Procedures, bzw. wann ist es besser Functions anstatt Procedures anzuwenden?


Ich mach dir mal ein Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Function FunktionenSindToll: Boolean;
begin
  result := True;
end;


Procedure FreuDich;
begin
  Application.Terminate;         // Beendet Programm
end;


Procedure MeinProgramm;
begin
  if FunktionenSindToll then
    FreuDich; 
end;


Besonders in If-Abfragen oder Rechnungen sind Funktionen üüüüberaus nützlich. So kannst du eine Funktion Add erstellen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Function Add(a, b: Integer): Integer;
begin
  result := a + b;
end;


Procedure MeinProgramm;
var
  summe: Integer;
begin
  Summe := Add(45);   // Summe ist jetzt 9 !
end;


Prozedur brauchste genau fürs Gegenteil - wenn du kein Rückgabewert brauchst für eine Rechnung, sondern etwas IN der Prozedur machst, wie zum Beispiel das Formular blau anmalen.


Delphi-Quelltext
1:
2:
3:
4:
Procedure BlauMalen;
begin
  MeinFormular.Color := ClBlue;    // ClBlue ist eine von Delphi erstellte Konstante, die eigentlich so aussieht: $FF0000 (RGB-Modell, bloß sind bei Delphi Rot und Blau ausgetauscht)
end;


navarro2010 - So 22.05.11 14:27


Delphi-Quelltext
1:
2:
3:
4:
Function Add(a, b: Integer): Integer;
begin
  result := a + b;
end;

Wie würde der komplette Quellcode dann aussehen und welche Elemente(Panel, Editfeld,...) müsste ich noch einfügen?


HenryHux - So 22.05.11 14:31

Ich weiß nicht genau, was du jetzt vorhast aber angenommen du willst einem Label jetzt das Ergebnis geben dann schreibst du:


Delphi-Quelltext
1:
label1.caption := inttostr(Add(1,2));                    


Wenn du Werte aus einem Editfeld übernehmen willst kannst du auch schreiben


Delphi-Quelltext
1:
label1.caption := inttostr(Add(strtoint(Edit1.text), strtoint(Edit2.text)));                    


lg


Delete - So 22.05.11 14:33

Das ist der ganze Code und du brauchst auch keine weiteren Steuerelemente. Wozu auch, wird ja auf keine zugegriffen.

Ich denke ein Grundlagentutorial oder Buch wäre ganz angebracht.


beastofchaos - So 22.05.11 14:58

Jep, ich hab mir auch alles per Buch und Ausprobieren beigebracht. Welche Delphi-Version hast du denn?


navarro2010 - So 22.05.11 15:20

Delphi 7


beastofchaos - So 22.05.11 15:39

user profile iconnavarro2010 hat folgendes geschrieben Zum zitierten Posting springen:
Delphi 7


Gut, ich auch :) Ich denke, du weißt, wie man sich ein Formular macht, Edits und Buttons setzt. Also sollteste das gut damit üben können. die OnClick-Prozedur von dem Button könnte dann so solche Funktionen und Prozeduren benutzen, um im EditFenster iwas einzugeben. Also z.B. Edit1.Text := IntToStr(Sub(Add(5, 7), 3)); (Das Ergebnis sollte 9 sein - das prüfste und wenns niht so ist, schau dir den Quelltext durch oder frag ;)