![]() |
AW: Result einer Funktion "Stil Frage"
Ui, vielen Dank für diese Lehrstunde.
Halten wir fest: 1. Grundsätzlich sollte man (immer! ohne Ausnahme!) das Funktionsresultat initialisieren. Delphi macht das zwar machnmal, aber guter Programmierstil sollte ohne wenn und aber gleichförmig sein. 2. Der Compiler sollte die Warnung 'Rückgabewert... könnte undefiniert sein' auf alle Funktionstypen ausweiten. So wie bei C# zum Beispiel. |
AW: Result einer Funktion "Stil Frage"
Nur als Bemerkung am Rande: in Free Pascal ist in den Modi fpc und objfpc der Funktionsname als "rvalue" erlaubt. Möchte man hier einen rekursiven Aufruf (bei einer parameterlosen Funktion), so muss ein leeres Klammerpaar angehängt werden.
Delphi-Quellcode:
Gruß,
program resulttest;
{$ifdef fpc} {$mode objfpc} {$endif} {$apptype console} function Sum: LongInt; const Values: array[0..4] of Byte = ( 1, 2, 3, 4, 5 ); var b: Byte; begin Sum := 0; for b in Values do Sum := Sum + b; // Sum() würde die Funktion rekursiv aufrufen end; begin Writeln(Sum); // ergibt "15" und nicht "stack overflow" ;) end. Sven |
AW: Result einer Funktion "Stil Frage"
Zitat:
Im Fall einer Zuweisung ist es die Variable, welcher du zuweist. Andernfalls eine vom Compiler erzeugte Variable. Das kann man sich auch in der CPU Ansicht anschauen. Im von dir gezeigten Beispiel wird dort s übergeben
Code:
Weist man auf etwas zu, was nicht als var Parameter übergeben werden kann (z.b. eine Property), dann wird die compiler erzeugte Variable benutzt:
s := Test;
8D45F4 lea eax,[ebp-$0c] E8A4FFFFFF call Test
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var i: Integer; s: string; begin for i := 0 to 2 do Caption := Test; ShowMessage(s); end;
Code:
Caption := Test;
8D45EC lea eax,[ebp-$14] E8A1FFFFFF call Test 8B55EC mov edx,[ebp-$14] 8B45FC mov eax,[ebp-$04] E8C662FBFF call TControl.SetText |
AW: Result einer Funktion "Stil Frage"
Ich meinte unklar, aus Sicht der Funktion.
Die Funktion weiß nicht wo die Variable ihrer Results genau herkomm. Das kann eine Globale sein, irgenein Feld einer Klasse oder eine fremde Lokale. Ist aber im Prinzip auch egal, da die Funktion nicht sicher sein kann, daß die externe Variable "leer" ist. |
AW: Result einer Funktion "Stil Frage"
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 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-2025 by Thomas Breitkreuz