Autor Beitrag
navarro2010
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 22.05.11 12:17 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 22.05.11 12:19 
Eine Prozedur bekommt ggf. Parameter, hat aber keinen Rückgabewert während eine Funktion einen Rückgabewert hat.

Für diesen Beitrag haben gedankt: navarro2010
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 22.05.11 12:21 
Und um etwas Quelltext anzufügen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure AA(i: String);
begin
{...}
end;

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

Für diesen Beitrag haben gedankt: navarro2010
navarro2010 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: 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:
ausblenden 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 ;)

Für diesen Beitrag haben gedankt: navarro2010
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



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

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

ausblenden 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.

ausblenden 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;

Für diesen Beitrag haben gedankt: navarro2010
navarro2010 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 22.05.11 14:27 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: 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:

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


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

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


lg
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: So 22.05.11 14:58 
Jep, ich hab mir auch alles per Buch und Ausprobieren beigebracht. Welche Delphi-Version hast du denn?
navarro2010 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 25
Erhaltene Danke: 1



BeitragVerfasst: So 22.05.11 15:20 
Delphi 7
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: 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 ;)