AW: Procedure vs Function, Vor- und Nachteile
Weil der Programmierer bewußt die Compiler-Warnung "Result wurde nicht initialisizert !" ignoriert. Somit behält result u.U. seinen Wert und es wird dazu ein 'a' addiert.
|
AW: Procedure vs Function, Vor- und Nachteile
Boing... jetzt habs ich kapiert. Also ein klassischer Fehler.
|
AW: Procedure vs Function, Vor- und Nachteile
Wie gesagt, der Compiler macht aus solchen Funktionen eben eine Prozedur mit VAR-Parameter
Delphi-Quellcode:
Grundsätzlich ist das für den Entwickler egal.
procedure Test(var Result: string); //function Test: string;
begin Result := Result + 'a'; end; for i := 1 to 5 do Test(S); //S := Test; ShowMessage(S); // 'aaaaa' Er muß eben nur selber aufpassen, dass er solche Variablen initialisiert. Am Enfachsten grundsätzlich immer alle Result-Variablen selber initialisieren, wenn mit dem Startwert gerechnet wird. Für den Compiler ist es so halt viel anfacher die Result-Variable zu verwalten, denn bei gemanagten Typen muß er selber dafür sorgen, dass letztendlich diese Variable immer ordnungsgemäß freigegeben werden und das ist hier einfacher, wenn er direkt die äußere Variable nimmt. |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
Muss ich irgendwo was ändern das der eine Warnung wirft bzw hab ich irgendwo was abgeschaltet was das verhindert? edit
Delphi-Quellcode:
So ist's in meinem Delphi ohne Warnungen/Fehler kompiliert worden.
function Test1: string;
begin Result := Result + 'a'; end; function Test2: string; begin Result := 'a' + Result; end; procedure TForm1.Button1Click(Sender: TObject); var i : Byte; S : String; begin for i := 1 to 5 do S := Test1; Label1.Caption := S; end; procedure TForm1.Button2Click(Sender: TObject); var i : Byte; S : String; begin for i := 1 to 5 do S := Test2; Label2.Caption := S; end; |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
https://www.delphipraxis.net/1399299-post7.html |
AW: Procedure vs Function, Vor- und Nachteile
Bei Delphi 7 kann man in den Projektoptionen unter Compilermeldungen auswählen, ob die Warnung 'Dr Rückgabewert der Funktion könnte undefiniert sein.' ausgegeben werden soll oder nicht.
Sieht bei den Meldungen dann sinngemäß so aus:
Code:
[Warnung] Unit1.pas(Zeile): Rückgabewert der Funktion 'TForm1.NameDerFunktion' könnte undefiniert sein
|
AW: Procedure vs Function, Vor- und Nachteile
@himitsu: Ja schon, Du schreibst werden nicht Angezeigt, Ghostwalker schreibt das der Programmierer diese Warnung ignoriert.
Wenn er also eine Angezeigt bekommt, das hätte ich auch gerne, weshalb ich da nochmal nachhakte. |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
Delphi-Quellcode:
Es geht aber noch schlimmer:
function Test: string;
begin Result := Result + 'a'; end;
Delphi-Quellcode:
Niemand wird dir sagen können, was dieses Programm tut.
function Test: Integer;
begin Result := Result + 1; end; begin ShowMessage(IntToStr(Test)); end; |
AW: Procedure vs Function, Vor- und Nachteile
Doch, es geht u. a. um die entsprechende Warnung:
Ghostwalker schrieb hier: https://www.delphipraxis.net/1399309-post11.html, dass es sie gibt. Und Kodezwerg schrieb dort: https://www.delphipraxis.net/1399314-post14.html, dass er die Meldung nicht erhalte und fragte nach, was er machen/ändern müsse, um diese Warnung zu erhalten. Darauf bezog ich mich und nicht darauf, dass das zur Diskussion stehende Codefragment nicht zwingend klar und verständlich ist, sondern nur als Beispiel für den Unterschied zwischen Prozeduren und Funktionen und ggfls. daraus resultierenden Fallstricken dient. |
AW: Procedure vs Function, Vor- und Nachteile
Zitat:
Und diesen Wert zeigt das Programm dir dann an. Aber das ganze kann natürlich auch bei komplizierteren Funktionen durchaus noch ganz andere Effekte haben. Genau deswegen gibts die Warnung. Mit Ignorieren war schlicht gemeint, das die entsprechende Warnung ausgeschalten war, oder die Warnung vom Programmierer bewußt nicht gelesen wurde. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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