Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wozu out-Parameter? (https://www.delphipraxis.net/39878-wozu-out-parameter.html)

VizeTE 8. Feb 2005 15:25


Wozu out-Parameter?
 
Hallo,

in der Delphi-Hilfe steht, daß ich einen Parameter als Ausgabeparameter mit dem Schlüsselwort "out" kennzeichnen kann. Dann wird der Inhalt des Parameters beim Methodenaufruf verworfen und ggf. mit Inhalt aus der Methode gefüllt.
Soweit die Theorie, erstmal klar.
Aber ich kann mir nicht so richtig ein praktisches Beispiel herleiten wo mir das richtig was bringt. Das selbe Ergebnis könnte ich doch auch mit dem Schlüsselwort var erreichen, oder?
Hat da jemand einen Denkanstoß für mich?

Danke - VizeTE

sakura 8. Feb 2005 15:28

Re: Wozu out-Parameter?
 
Out wird vorwiegend im COM-Bereich genutzt. Aber auch in Delphi kann es Sinn machen. Wenn man mehrere Werte aus einer Methode zurückgeben will, kann man anstatt von var auch out nutzen, um dem Aufrufer klar zu machen, dass der Wert ausschließlich für die Rückgabe genutzt wird.

...:cat:...

Muetze1 8. Feb 2005 15:35

Re: Wozu out-Parameter?
 
Moin!

Auch macht sich Delphi vorher nicht die Mühe den aktuellen Wert der Variablen zu ermitteln und diesen der Funktion beim Aufruf zu übergeben. Auch kann Delphi damit besser optimieren, da es genau weiss, dass der Inhalt der Variablen vor dem Funktionsaufruf unwichtig ist.

MfG
Muetze1

VizeTE 8. Feb 2005 16:25

Re: Wozu out-Parameter?
 
aha, also bietet das nicht wirklich neue Möglichkeiten sondern ist "nur" eine Frage von Stil und Optimierung.

Danke!

shmia 8. Feb 2005 16:42

Re: Wozu out-Parameter?
 
Zitat:

Zitat von Muetze1
Auch macht sich Delphi vorher nicht die Mühe den aktuellen Wert der Variablen zu ermitteln und diesen der Funktion beim Aufruf zu übergeben. Auch kann Delphi damit besser optimieren, da es genau weiss, dass der Inhalt der Variablen vor dem Funktionsaufruf unwichtig ist.

Nur schade, dass Delphi nicht vor dem Lesezugriff von Out-Paramtern warnt.
Delphi-Quellcode:
// ein konstruiertes Beispiel
function Test(out key : integer):boolean;
begin
   Result := False;
   if key > 100 then   // <==== musste eigentlich einen Fehler erzeugen (zumindest Warnung)
   begin
      key := 0;
      Result := True;
   end;
end;

eckardt69 29. Feb 2016 12:34

AW: Wozu out-Parameter?
 
Delphi-Quellcode:
// ein konstruiertes Beispiel
function Test(out key : integer):boolean;
begin
   Result := False;
   if key > 100 then // <==== musste eigentlich einen Fehler erzeugen (zumindest Warnung)
   begin
      key := 0;
      Result := True;
   end;
end;
Wie würde dann die Funktion im Programm aufgerufen werden?

mkinzler 29. Feb 2016 12:51

AW: Wozu out-Parameter?
 
Sinnvoll ist diese Abfrage nicht, da eine Out-Variable ja beim Aufruf mit dem Standardwert vorbelegt wird.
Aufruf:
Delphi-Quellcode:
if Test( <irgendeine Integer-Variable>) then ...
http://docwiki.embarcadero.com/RADSt...r_%28Delphi%29

Neutral General 29. Feb 2016 12:55

AW: Wozu out-Parameter?
 
Also in Delphi 7 bekomme ich 123 angezeigt:
Delphi-Quellcode:
procedure TestOut(out abc: Integer);
begin
  ShowMessage(IntToStr(abc));
end;

procedure TForm1.Button1Click(Sender: TObject);
var intVar: Integer;
begin
  intVar := 123;
  TestOut(intVar);
end;
Seid ihr euch sicher dass der Compiler das out in irgendeiner Weise beachtet bzw. anders behandelt?
Sieht nämlich nicht so aus.

himitsu 29. Feb 2016 13:14

AW: Wozu out-Parameter?
 
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.

uligerhardt 29. Feb 2016 13:24

AW: Wozu out-Parameter?
 
Zitat:

Zitat von Neutral General (Beitrag 1331678)
Seid ihr euch sicher dass der Compiler das out in irgendeiner Weise beachtet bzw. anders behandelt?
Sieht nämlich nicht so aus.

Soweit ich weiß, tut er das bei verwalteten Typen (Strings, Interfaces, dynamische Arrays) tatsächlich. Dort wird der Inhalt der übergebenen Variablen mit _DynArrayClear o.ä. aufgeräumt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 1 von 2  1 2      

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