AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Procedure vs Function, Vor- und Nachteile

Procedure vs Function, Vor- und Nachteile

Ein Thema von KodeZwerg · begonnen am 15. Apr 2018 · letzter Beitrag vom 23. Apr 2018
Antwort Antwort
Seite 1 von 10  1 23     Letzte » 
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#1

Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 12:39
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!
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.525 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:00
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 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.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
345 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:08
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 var Parameter sinnvoll sein, um Kopieroperationen zu vermeiden. Muss man sich im Normalfall aber keine Gedanken drüber machen.
Da hast du var mit const verwechselt.

Zudem verwechselt ihr beide var mit out .
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:16
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?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
günni0

Registriert seit: 7. Mär 2018
260 Beiträge
 
#5

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:18
Vielleicht hilft das hier
https://www.delphipraxis.net/39878-w...parameter.html
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:25
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
Auf Assembler-Ebene gibt es keine signifikanten Unterschiede.
Dafür auch Danke!
Gruß vom KodeZwerg

Geändert von KodeZwerg (15. Apr 2018 um 13:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
34.656 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:31
In seltenen Fällen (bei Übergabe großer Strukturen bzw. Strings, etc.) kann ein 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 function Beispiel(...): string; eben auch einprocedure 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (15. Apr 2018 um 14:04 Uhr)
  Mit Zitat antworten Zitat
günni0

Registriert seit: 7. Mär 2018
260 Beiträge
 
#8

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:41
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?
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
1.363 Beiträge
 
Delphi 2009 Professional
 
#9

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:47
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'
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
günni0

Registriert seit: 7. Mär 2018
260 Beiträge
 
#10

AW: Procedure vs Function, Vor- und Nachteile

  Alt 15. Apr 2018, 13:59
Aber Test() hat doch keinerlei Parameter. Wie kommt diese Prozedur denn an die vorherigen Zuweisungen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 10  1 23     Letzte » 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf