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
Martok: 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
navarro2010 hat folgendes geschrieben : |
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
navarro2010 hat folgendes geschrieben : |
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; 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(4, 5); 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; 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
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 ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!