![]() |
Unterschied zwischen Prozeduren und Funktionen
joooo...schon wieder sone doofe frage -_-
Ok, der unterschied zwischen prozeduren und funktionen, ist der, dass letztere ein ergebnis zurückliefert und eine prozedur eben nicht...aber man kann doch per call by reference mit einer prozedur einer variable direkt das ergebnis geben. Deswegen frag ich mich nun wann man funktionen und wann man prozeduren nehmen sollte..(darauf bin ich aus meinem vorigen thread gekommen). hat mal jemand ein kleines beispiel was eine funktion kann, eine prozedur aber nicht? und umgekehrt. |
Re: Unterschied zwischen Prozeduren und Funktionen
Delphi-Quellcode:
wenn du jetzt rechnen willst:
function rechne(a, b: Integer): Integer;
begin result := a + b; end;
Delphi-Quellcode:
währe es reichlich platzverschwendung
z := rechne(a, b) * z / y;
Delphi-Quellcode:
zu benutzen.
rechne(a, b, ergebnis);
z := ergebnis * z / y; die Variante mit der Referenzübergabe bietet sich für klassen an wo das ergebnis zum Beispiel in einer TStringlist gespeichert wird da man sonst sich erst noch gedanken um die speicherreservierung und spätere freigabe vom TStringlistergebnis machen müsste. Oder wenn ich eine einer TStringlist etwas hinzufügen will wäre es ziemlich resourcen verschwendend wenn ich eine stringlist übergebe und als result eine größere stringlist zurückgegeben wird die ich dann eh zum ersetzen meines übergabewertes nehme. |
Re: Unterschied zwischen Prozeduren und Funktionen
danke, das beispiel war gut :)
|
Re: Unterschied zwischen Prozeduren und Funktionen
Wenn du die Variable direkt ändern willst, geht es mit der Prozedur besser:
Delphi-Quellcode:
Function Rechne(A, B: Integer): Integer;
Begin Result := A + B; End; B := Rechne(A, B);
Delphi-Quellcode:
Procedure Rechne(A: Integer; Var B: Integer);
Begin B := A + B; End; Rechne(A, B); Und wenn mehrere Variablen geändert werden sollen ist diese auch besser:
Delphi-Quellcode:
Wo die Funktion ihre Vorteile hat, sagte ja schon Thornberry.
Procedure Rechne(A: Integer; Var B, C: Integer);
Begin B := A + B; C := A + C; End; Rechne(A, B, C); http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() [edit=sakura] Ich habe Deinen Doppelpost wie gewünscht in die ewigen DP-Gründe verbannt. Mfg, sakura[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz