Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verhält sich "Result" wie eine globale Variable?? (https://www.delphipraxis.net/106345-verhaelt-sich-result-wie-eine-globale-variable.html)

BloodySmartie 9. Jan 2008 15:01


Verhält sich "Result" wie eine globale Variable??
 
Hallo liebe Community!

Ich dachte eigentlich schon, wenigstens den Mechanismus von einfachen Funktionen in Delphi grundlegend verstanden zu haben. Nun allerdings hat es mich überrascht, dass das Result einer Funktion mit Rückgabetyp 'string' sich so verhält wie eine globale Variable: Der Inhalt von Result bleibt beim zweiten Aufruf erhalten.

Kann mir jemand erklären, warum? Und wozu das gut ist? Meine heile Welt ist gerade zerbrochen :)

Dax 9. Jan 2008 15:02

Re: Verhält sich "Result" wie eine globale Variabl
 
Pure coincidence. "Result" ist eine implizite lokale Variable, die den Rückgabewert der Funktion beschreibt. Wenn der zwischen zwei Aufrufen gleich bleibt, hast du einfach nur Glück gehabt.

DelphiKlaus 9. Jan 2008 15:03

Re: Verhält sich "Result" wie eine globale Variabl
 
Hallo,

bleibt der Inhalt erhalten oder liegt die Variable zufällig auf dem gleichen Speicherplatz?

s-off 9. Jan 2008 15:05

Re: Verhält sich "Result" wie eine globale Variabl
 
Zitat:

Zitat von BloodySmartie
Hallo liebe Community!

Ich dachte eigentlich schon, wenigstens den Mechanismus von einfachen Funktionen in Delphi grundlegend verstanden zu haben. Nun allerdings hat es mich überrascht, dass das Result einer Funktion mit Rückgabetyp 'string' sich so verhält wie eine globale Variable: Der Inhalt von Result bleibt beim zweiten Aufruf erhalten.

Kann mir jemand erklären, warum? Und wozu das gut ist? Meine heile Welt ist gerade zerbrochen :)

Ähm,

Beim zweiten Aufruf von was? Der Funktion? Na wenn das Ergebnis doch das Gleiche ist?
Oder ein zweiter Zugriff innerhalb der Funktion? Ja, denn für die Funktion ist Result erstmal nichts anderes als eine lokale Variable innerhalb der Funktion.

Verstehe Deine Frage nicht so ganz.

quendolineDD 9. Jan 2008 15:12

Re: Verhält sich "Result" wie eine globale Variabl
 
Ich würde sagen, er hat eine Funktion einmal im Programm aufgerufen, einen Rückgabewert erhalten und später im Programm die Funktion erneut aufgerufen und diese enthielt immer noch den alten Rückgabewert.

Nun ist seine Frage, ob das Ergebnis in Result global gespeichert wird, da sich der Inhalt dieser "Variable" nicht änderte.

Grüße

BloodySmartie 9. Jan 2008 15:14

Re: Verhält sich "Result" wie eine globale Variabl
 
Also passt mal auf: Ich habe nur ein wenig rumgespielt und war dabei zu faul, mir eine zusätzliche lokale Variable zu deklarieren. Um meine Rückgabe zusammenzusetzen, benutzte ich daher result:

Delphi-Quellcode:
function getStringfromCharArr(ca:array of char):string;
var i,l:integer;
begin
// result:=''; ---Problemlösung :)
l:=length(ca);
for I := 0 to l - 1 do begin
  result:=result+string(ca[i]);
end;
end;
Wenn nun beim Ersten Aufruf in ca "'b','i','n',' '" stand, und beim Zweiten "'i','c','h',' ','d','o','o','f'", gab die Funktion am Ende den String "bin ich doof" zurück.

s-off 9. Jan 2008 15:16

Re: Verhält sich "Result" wie eine globale Variabl
 
Tut mir leid, aber ich blicke das nicht...

Angenommen ich habe folgende Funktion:
Delphi-Quellcode:
Function MachMaPlus(a,b: Integer): String;
Begin
   Result := '';

   Result := IntToStr(a+b);
End;
und rufe diese so auf:
Delphi-Quellcode:
MachMaPlus(6,7);
Dann liefert diese Funktion mir 13 als String - egal ob ich das heute, morgen oder in 20 Jahren aufrufe.
Was ist das für eine Frage, ob das global gespeichert wird?

Oxmyx 9. Jan 2008 15:18

Re: Verhält sich "Result" wie eine globale Variabl
 
Result ist eine lokale Variable, und ihr Gültigkeitsbereich endet beim Verlassen der Funktion. Dass beim zweiten Aufruf der Funktion die Variable oft wieder auf den selben Speicherbereich fällt, ist ganz normal. Speicherreservierung ist ja keine völlig wahlfreie Zufallsangelegenheit. Das heißt aber nicht, dass man damit irgend etwas machen könnte. Eine Variable ist nur innerhalb ihres Gültigkeitsbereichs definiert, und sie enthält nur dann verwertbare Daten, wenn sie initialisiert wurde. Lass dich nicht davon täuschen, wenn zufällig noch alte Daten dort stehen, es könnte genausogut auch etwas völlig anderes sein.

s-off 9. Jan 2008 15:19

Re: Verhält sich "Result" wie eine globale Variabl
 
Nochwas, wenn Du ein Array als Argument übergibst, dann solltest Du Dir daraus einen Type bauen!

Edit: RS.

BloodySmartie 9. Jan 2008 15:21

Re: Verhält sich "Result" wie eine globale Variabl
 
Okay, also mal anders:

Delphi-Quellcode:
var
s:string;
a:array of char[2];

begin
a[0]:='1';
a[1]:='1';
s:=getStringfromCharArr(a);
//s enhält an dieser Stelle '11'
//weiter...
a[0]:='2';
a[1]:='2';
s:=getStringfromCharArr(a);
//Ich hätte nun erwartetn, dass in s '22' steht. - "Neuer Funktionsaufruf, neues Glück."
//Stattdessen steht darin aber '1122'.
end.
Vielleicht isses jetzt besser verständlich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.
Seite 1 von 3  1 23      

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