Autor Beitrag
colaka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 4

Win XP, W7
Delphi 2005 Prof.
BeitragVerfasst: So 18.10.09 10:36 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: 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:

ausblenden 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

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.
colaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 4

Win XP, W7
Delphi 2005 Prof.
BeitragVerfasst: So 18.10.09 11:03 
Ja, danke.
Mit result geht es.
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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.

www.delphi-treff.de/...uren-und-funktionen/
en.wikibooks.org/wik...Syntax_and_functions

Und jetzt noch einmal ausprobieren und staunen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 183
Erhaltene Danke: 7

Win7
Delphi XE5 Starter, RAD Studio XE7 Pro
BeitragVerfasst: 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

_________________
Es gibt keine dummen Fragen, nur dumme Antworten.
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Mi 21.10.09 15:21 
Man sollte meiner Meinung nach aber vermeiden, den Funktionsnamen als Rückgabewert zu benutzen. Das stiftet nur Verwirrung.

ausblenden 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

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
Robert.Wachtel
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 895
Erhaltene Danke: 7

Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
BeitragVerfasst: 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.