Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi konstanter Rückgabewert bei Funktionen? (https://www.delphipraxis.net/127246-konstanter-rueckgabewert-bei-funktionen.html)

chaoslion 9. Jan 2009 21:25


konstanter Rückgabewert bei Funktionen?
 
Hallo!


ist es denn möglich einer Funktion einen konstanten Rückgabewert zu geben?
Zb wenn ich ein Element meiner Listeklasse will, soll er ja keine neue Instanz zurückgeben sondern quasi den Zeiger.


mfG

taaktaak 9. Jan 2009 21:28

Re: konstanter Rückgabewert bei Funktionen?
 
Ich würde sagen, dass die Rückgabe normalerweise immer ein Zeiger auf die bestehende Instanz ist. Eine NEUE Instanz müsstest du doch selbst in der Funktion erzeugen.

mkinzler 9. Jan 2009 21:32

Re: konstanter Rückgabewert bei Funktionen?
 
Es wird ja keine Instanz, sondern eine Referenz(Zeiger) auf sie zurückgegeben. Aber was meinst du mit Konstante? Skizziere dein Vorhaben einmal etwas genauer ( Code)

DeddyH 9. Jan 2009 21:38

Re: konstanter Rückgabewert bei Funktionen?
 
Ich mutmaße mal:
Delphi-Quellcode:
type
  TMyClass = class
  private
    MyList: TObjectList;
    function GetFirstElement: TObject;
  public
    property FirstElement: TObject read GetFirstElement;
...

function TMyClass.GetFirstElement: TObject;
begin
  if MyList.Count > 0 then
    Result := MyList[0]
  else
    Result := nil;
end;
Ich könnte mir vorstellen, dass etwas in der Art gemeint ist.

3_of_8 9. Jan 2009 21:40

Re: konstanter Rückgabewert bei Funktionen?
 
Was du meinst, ist nicht "konstant". Was du meinst, ist Referenz statt Wert. Wenn dein Listenelement ein Array, Record, String oder Objekt ist, wird immer die Referenz zurückgegeben, wobei es bei Arrays, Strings und ich glaube auch Records ein paar komplizierte Regeln gibt, die ich mir nie merken kann, dass manche davon "Copy on write" haben, also es wird zwar nur die Referenz übergeben, aber sobald man dann versucht, darauf zu schreiben, wird es kopiert, sodass das Original unverändert bleibt.

Wenn du also nur die Referenz zurückgeben willst, musst du gar nichts machen, (außer bei primitiven Typen wie Integern, da geht das gar nicht, ohne einen Record oder eine Klasse drumrumzuwrappen), wenn du eine Kopie zurückgeben willst, schon.

chaoslion 9. Jan 2009 21:44

Re: konstanter Rückgabewert bei Funktionen?
 
ach okey danke euch. nun alles klar.


ich ging von c++ aus >

Code:

class ctest {
public:
 tlist item;
 const tlistelement &getItemAt( int idx );
}
dachte man müsse/könne es in Delphi auch so machen aber wenns automatisch geht, isse ja wunderbar :)

Reinhard Kern 10. Jan 2009 13:04

Re: konstanter Rückgabewert bei Funktionen?
 
Zitat:

Zitat von chaoslion
ach okey danke euch. nun alles klar.
...dachte man müsse/könne es in Delphi auch so machen aber wenns automatisch geht, isse ja wunderbar :)

Hallo,

wenn du sichergehen willst, dass der Compiler von sich keine Kopierfunktionen einfügt, dann kannst du ja als Rückgabe einen Pointer definieren, also PObject statt TObject. U.U. musst du das noch selbst definieren, und nach den gültigen Delphi-Regeln ist PObject dasselbe wie TObject, aber für den Compiler ist es eben ein Pointer und er unternimmt nichts weiter.

Die Weiterverarbeitung ist etwas komplizierter, aber im Notfall hilft ein Typecast.

Gruss Reinhard

3_of_8 10. Jan 2009 14:02

Re: konstanter Rückgabewert bei Funktionen?
 
Oh nein, das ist eine ganz schlechte Idee. Wenn du ein Objekt AObj hast und dann @AObj zurückgibst, bekommst du wahrscheinlich Mist raus.

Bei Records ist das schon eher sinnvoll, aber bei Arrays und Strings nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 Uhr.

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