Delphi-PRAXiS
Seite 1 von 10  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Procedure vs Function, Vor- und Nachteile (https://www.delphipraxis.net/196015-procedure-vs-function-vor-und-nachteile.html)

KodeZwerg 15. Apr 2018 12:39

Procedure vs Function, Vor- und Nachteile
 
Hallo, der Titel ist ja recht Aussagekräftig

Beispiele
Delphi-Quellcode:
// Funktionen Vorteil, sie geben etwas direkt wieder
Function Beispiel : Boolean;
begin
  Result := True;
end;

// Proceduren können ja auch etwas wiedergeben per Var
// Nachteil, man benötigt eben eine Variable um das Var auszuwerten
Procedure Beispiel (var bResult: Boolean);
begin
  bResult := True;
end;
Aber was Unterscheidet die Beiden noch? Gibt es im Speicher Unterschiede? Was ist performanter?
Gibt es Unterschiede wie Delphi es handhabt wenn eine Function/Procedure eingeleitet bzw. am Ende angekommen ist?
Oder wie schauts aus in Libraries (DLL), man kann ja beides EXPORT machen.
Was fällt Euch noch zum Thema Procedure vs Function, Vor- und Nachteile ein?
Ich würde gerne Eure Meinungen dazu erfragen, egal wie verwegen, falls es abstrakte Unterschiede gibt.
Oder Beispiele wo man für eine Sache eher das nehmen sollte wohingegen bei anderen Sachen nur das andere genommen werden sollte mit einer Mini-Begründung.

Falls sich jemand hier einklinkt und Antwortet, Danke dafür!

Zacherl 15. Apr 2018 13:00

AW: Procedure vs Function, Vor- und Nachteile
 
Ziemlich wurscht. Wenn man einen Rückgabewert hat, sind Funktionen zu bevorzugen, da sie intuitiver sind und genau für diesen Zweck entwickelt wurden. In seltenen Fällen (bei Übergabe großer Strukturen bzw. Strings, etc.) kann ein
Delphi-Quellcode:
var
Parameter sinnvoll sein, um Kopieroperationen zu vermeiden. Muss man sich im Normalfall aber keine Gedanken drüber machen.

Auf Assembler-Ebene gibt es keine signifikanten Unterschiede.

Redeemer 15. Apr 2018 13:08

AW: Procedure vs Function, Vor- und Nachteile
 
Zitat:

Zitat von Zacherl (Beitrag 1399294)
Ziemlich wurscht. Wenn man einen Rückgabewert hat, sind Funktionen zu bevorzugen, da sie intuitiver sind und genau für diesen Zweck entwickelt wurden. In seltenen Fällen (bei Übergabe großer Strukturen bzw. Strings, etc.) kann ein
Delphi-Quellcode:
var
Parameter sinnvoll sein, um Kopieroperationen zu vermeiden. Muss man sich im Normalfall aber keine Gedanken drüber machen.

Da hast du
Delphi-Quellcode:
var
mit
Delphi-Quellcode:
const
verwechselt.

Zudem verwechselt ihr beide
Delphi-Quellcode:
var
mit
Delphi-Quellcode:
out
.

KodeZwerg 15. Apr 2018 13:16

AW: Procedure vs Function, Vor- und Nachteile
 
Da würde ich gerne nochmal nachhaken
Delphi-Quellcode:
Procedure Beispiel1 (var bResult: Boolean);
begin
  bResult := True;
end;

Procedure Beispiel2 (out bResult: Boolean);
begin
  bResult := True;
end;
Was Unterscheidet Beispiel1 von Beispiel2? Beides schreibt doch bResult um?

günni0 15. Apr 2018 13:18

AW: Procedure vs Function, Vor- und Nachteile
 
Vielleicht hilft das hier
https://www.delphipraxis.net/39878-w...parameter.html

KodeZwerg 15. Apr 2018 13:25

AW: Procedure vs Function, Vor- und Nachteile
 
Zitat:

OUT ist grundsätzlich (per Definition) wie das Funktions-RESULT.
"Wenn" etwas rein geht, dann wird es ignoriert und es wird nur etwas zurückgegeben.
Bzw. der Programmierer darf niemals davon ausgehen, dass dort "gültige" Were von außen rein kommen.

Der Compiler behandelt es allerdings vorallem wie VAR, nur sollte er zumindestens die "Variable nicht initialisiert"-Prüfung deaktivieren.
Hat geholfen, Danke!

edit
Zitat:

Zitat von Zacherl (Beitrag 1399294)
Auf Assembler-Ebene gibt es keine signifikanten Unterschiede.

Dafür auch Danke!

himitsu 15. Apr 2018 13:31

AW: Procedure vs Function, Vor- und Nachteile
 
Zitat:

Zitat von Zacherl (Beitrag 1399294)
In seltenen Fällen (bei Übergabe großer Strukturen bzw. Strings, etc.) kann ein
Delphi-Quellcode:
var
Parameter sinnvoll sein, um Kopieroperationen zu vermeiden. Muss man sich im Normalfall aber keine Gedanken drüber machen.

Gerade da ist es total wurscht,
denn bei gemanagten Typen ala String, Variant, Interface und dynamischen Arrays macht der Delphi-Compiler aus
Delphi-Quellcode:
function Beispiel(...): string;
eben auch ein
Delphi-Quellcode:
procedure Beispiel(...; var Result: string);
und kopiert nichts um.

Leider ist das auch das Problem/die Urache, dass bei Funktionen für das Result keine "wurde nicht initialisiert"-Meldung vom Compiler kommt, da es eben doch initialisiert wurde (außerhalb)
und mit dem Ergebnis, dass bei vergessenen Initialisierung schnell etwas Komisches heraus kommt,
Delphi-Quellcode:
function Test: string;
begin
  Result := Result + 'a';
end;

for i := 1 to 5 do
  S := Test;
ShowMessage(S); // 'aaaaa'
aber wenn man sich das jetzt gedanklich als Prozedur ansieht, dann ist sofort klar, warum es so ist.

günni0 15. Apr 2018 13:41

AW: Procedure vs Function, Vor- und Nachteile
 
Zitat:

Delphi-Quellcode:
function Test: string;
begin
  Result := Result + 'a';
end;

for i := 1 to 5 do
  S := Test;
ShowMessage(S); // 'aaaaa'

Ich stehe gerade etwas auf dem Schlauch. Aber warum wird aaaaa ausgegeben?
Man schreibt S bei jedem Schleifendurchlauf doch neu und pro "Test" wird nur 1x a hinzugefügt.

Sollte das nicht nur "a" angezeigt werden?

KodeZwerg 15. Apr 2018 13:47

AW: Procedure vs Function, Vor- und Nachteile
 
Zitat:

Zitat von günni0 (Beitrag 1399300)
Zitat:

Delphi-Quellcode:
function Test: string;
begin
  Result := Result + 'a';
end;

for i := 1 to 5 do
  S := Test;
ShowMessage(S); // 'aaaaa'

Ich stehe gerade etwas auf dem Schlauch. Aber warum wird aaaaa ausgegeben?
Man schreibt S bei jedem Schleifendurchlauf doch neu und pro "Test" wird nur 1x a hinzugefügt.

Sollte das nicht nur "a" angezeigt werden?

Nein, S wird 5x durch function addiert (Result := Result + 'a';)

günni0 15. Apr 2018 13:59

AW: Procedure vs Function, Vor- und Nachteile
 
Aber Test() hat doch keinerlei Parameter. Wie kommt diese Prozedur denn an die vorherigen Zuweisungen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 Uhr.
Seite 1 von 10  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz