Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - function liefert keinen String
colaka - So 18.10.09 10:36
Titel: function liefert keinen String
Hallo,
ich möchte ein Feld einer Tabelle auf den Anfangsbuchstaben überprüfen und dann einen bestimmten Wert als String ausgeben. Dazu habe ich mir die folgende Funktion (aufs wesentliche reduziert) deklariert:
Delphi-Quelltext
1: 2: 3: 4:
| function HName(X:String) : String; begin if X[1] = 'A' then HName := 'Aale' else HName := 'NoName'; end; |
Es kommt zwar keine Fehlermeldung, aber funtionieren tut es auch nicht. Kann mir jemand sagen, warum?
Danke Ebi
Robert.Wachtel - So 18.10.09 10:48
colaka hat folgendes geschrieben : |
| [...] funtionieren tut es auch nicht. [...] |
Und das heisst im Klartext genau was?
jackle32 - So 18.10.09 10:56
Moin,
kann auch gar nicht funktionieren. Du musst in Funktionen bestimmen was dein Rückgabewert ist. Der Befehl dafür ist "result".
Du musst deinen Rückgabewert also nicht auf den Funktionsnamen schreiben, sondern mit result zurück geben.
Also so:
Delphi-Quelltext
1: 2: 3: 4:
| function HName(X:String) : String; begin if X[1] = 'A' then result := 'Aale' else result := 'NoName'; end; |
Gruß Jack
colaka - So 18.10.09 11:03
Ja, danke.
Mit result geht es.
Robert.Wachtel - So 18.10.09 11:32
jackle32 hat folgendes geschrieben : |
| [...] kann auch gar nicht funktionieren. Du musst in Funktionen bestimmen was dein Rückgabewert ist. Der Befehl dafür ist "result". [...] |
Mööp - falsche Antwort. "Result" ist nur eine vordefinierte Variable, die den Rückgabewert repräsentiert und mit der im Gegensatz zur Verwendung des Funktionsnamens auch innerhalb der Funktion gearbeitet werden kann.
Dass der Funktionsname dem Rückgabewert entspricht ist seit ewigen Pascal-Zeiten so.
http://www.delphi-treff.de/sprachen/object-pascal/prozeduren-und-funktionen/
http://en.wikibooks.org/wiki/Pascal_Programming/Syntax_and_functions
Und jetzt noch einmal ausprobieren und staunen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| program MyTestProject;
{$APPTYPE CONSOLE}
uses SysUtils;
function MyTest: Integer; begin MyTest := 1234; end;
begin Writeln(MyTest()); end. |
Die Ursache des Problems des Threaderstellers liegt daher woanders. Daher auch meine Frage nach dem "funktioniert nicht".
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
jackle32 - Mi 21.10.09 15:10
Hallo nochmal,
also nachdem Robert angeregt hat diese Diskussion nochmal aufzunehmen. Hier nochmal ein paar Ideen und Fragen.
Nach der Lektüre der Links von Robert stimm ich mit ihm überein, dass die ursprüngliche Funktion okay ist.
Um daher den wirkliche Fehler zu finden wäre es gut wenn colaka noch mehr Sourcecode posten könnte.
Grüße Jack
Nersgatt - Mi 21.10.09 15:21
Man sollte meiner Meinung nach aber vermeiden, den Funktionsnamen als Rückgabewert zu benutzen. Das stiftet nur Verwirrung.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
function MyTest: Integer; var MyTest : Integer; begin MyTest := 1234; end;
begin Writeln(MyTest()); readln; end. |
Was wird auf der Konsole ausgegeben? Wer es errät, ohne es vorher selbst zu probieren, erlagt ewigen Ruhm.
Gruß,
Jens
Robert.Wachtel - Mi 21.10.09 15:33
Nersgatt hat folgendes geschrieben : |
| Man sollte meiner Meinung nach aber vermeiden, den Funktionsnamen als Rückgabewert zu benutzen. Das stiftet nur Verwirrung. [...] |
Das ist aber nicht das Problem bei der oben geposteten Funktion.
Wie jackle32 schon korrekt sagte, ohne Kenntnis des restlichen Quellcodes ist alles reine Spekulation.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!