Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unterschied zwischen Prozeduren und Funktionen (https://www.delphipraxis.net/12860-unterschied-zwischen-prozeduren-und-funktionen.html)

Pseudemys Nelsoni 5. Dez 2003 11:10


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.

SirThornberry 5. Dez 2003 11:23

Re: Unterschied zwischen Prozeduren und Funktionen
 
Delphi-Quellcode:
function rechne(a, b: Integer): Integer;
begin
  result := a + b;
end;
wenn du jetzt rechnen willst:
Delphi-Quellcode:
z := rechne(a, b) * z / y;
währe es reichlich platzverschwendung
Delphi-Quellcode:
rechne(a, b, ergebnis);
z := ergebnis * z / y;
zu benutzen.

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.

Pseudemys Nelsoni 5. Dez 2003 11:38

Re: Unterschied zwischen Prozeduren und Funktionen
 
danke, das beispiel war gut :)

himitsu 5. Dez 2003 11:42

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:
Procedure Rechne(A: Integer; Var B, C: Integer);
  Begin
    B := A + B;
    C := A + C;
  End;

Rechne(A, B, C);
Wo die Funktion ihre Vorteile hat, sagte ja schon Thornberry.

http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif http://www.FrankNStein.de/Smiley-Spinne.gif http://www.FrankNStein.de/Smiley-Winken.gif

[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