![]() |
Procedure vs Function, Vor- und Nachteile
Hallo, der Titel ist ja recht Aussagekräftig
Beispiele
Delphi-Quellcode:
Aber was Unterscheidet die Beiden noch? Gibt es im Speicher Unterschiede? Was ist performanter?
// 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; 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! |
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:
Parameter sinnvoll sein, um Kopieroperationen zu vermeiden. Muss man sich im Normalfall aber keine Gedanken drüber machen.
var
Auf Assembler-Ebene gibt es keine signifikanten Unterschiede. |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
Delphi-Quellcode:
mit
var
Delphi-Quellcode:
verwechselt.
const
Zudem verwechselt ihr beide
Delphi-Quellcode:
mit
var
Delphi-Quellcode:
.
out
|
AW: Procedure vs Function, Vor- und Nachteile
Da würde ich gerne nochmal nachhaken
Delphi-Quellcode:
Was Unterscheidet Beispiel1 von Beispiel2? Beides schreibt doch bResult um?
Procedure Beispiel1 (var bResult: Boolean);
begin bResult := True; end; Procedure Beispiel2 (out bResult: Boolean); begin bResult := True; end; |
AW: Procedure vs Function, Vor- und Nachteile
|
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
edit Zitat:
|
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
denn bei gemanagten Typen ala String, Variant, Interface und dynamischen Arrays macht der Delphi-Compiler aus
Delphi-Quellcode:
eben auch ein
function Beispiel(...): string;
Delphi-Quellcode:
und kopiert nichts um.
procedure Beispiel(...; var Result: string);
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:
aber wenn man sich das jetzt gedanklich als Prozedur ansieht, dann ist sofort klar, warum es so ist.
function Test: string;
begin Result := Result + 'a'; end; for i := 1 to 5 do S := Test; ShowMessage(S); // 'aaaaa' |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
Man schreibt S bei jedem Schleifendurchlauf doch neu und pro "Test" wird nur 1x a hinzugefügt. Sollte das nicht nur "a" angezeigt werden? |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
|
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 19:56 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 by Thomas Breitkreuz