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

user profile iconcolaka hat folgendes geschrieben Zum zitierten Posting springen:
[...] 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

user profile iconjackle32 hat folgendes geschrieben Zum zitierten Posting springen:
[...] 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 user profile iconNarses: 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

user profile iconNersgatt hat folgendes geschrieben Zum zitierten Posting springen:
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.