Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   2 Fragen zu Result (https://www.delphipraxis.net/12415-2-fragen-zu-result.html)

Die Muhkuh 26. Nov 2003 19:27


2 Fragen zu Result
 
Huhu :hi:

Ich hab mal Fragen zu Result:
  • 1. Was ist das überhaupt?
    2. Was kann man damit machen?

Ich hab schon in der OH gelesen aber ich werd echt nicht schlau draus! Kann mir das jemand mal erklären?

sakura 26. Nov 2003 19:28

Re: 2 Fragen zu Result
 
Result ist der Rückgabe-Wert einer Funktion...

Delphi-Quellcode:
function AddThem(a, b: Integer): Integer;
begin
  Result := a + b;
end;

...

ShowMessage(IntToStr(AddThem(5, 6)));
...:cat:...

Luckie 26. Nov 2003 19:31

Re: 2 Fragen zu Result
 
Result ist eine interne Variable, die den Rückgabewert einer Funktion beinhaltet und zurück gibt.

Delphi-Quellcode:
function foo: String;
vsr
  s: String;
begin
  s := 'Hello world.'
  result := s;
end;
Ist identisch mit der alten Pascal Schreibweise:
Delphi-Quellcode:
function foo: String;
vsr
  s: String;
begin
  s := 'Hello world.'
  foo := s;
end;

Florian H 26. Nov 2003 19:31

Re: 2 Fragen zu Result
 
Result ist der Rückgabewert einer Funktion.
also von irgendeiner funktion, z.B. IntToStr ist das ergebnis dann das Result.
Normalerweise musst du das nicht wissen, wenn du nur benutzt.

Wenn du nun aber eine eigene Funktion schreibst, ist das natürlich von bedeutung :)
Ich mach mal ein beispiel:

Delphi-Quellcode:
function Verdoppeln(wert : integer) : integer; // das 2. Integer ist jetzt der Typ von "result"
begin
  result := wert * 2; // dem Rückgabewert wird ein Wert zugewiesen
end;
Verständlicher?


EDIT: HRMPF, wieder letzter :wall: :wink:

MrKnogge 26. Nov 2003 19:33

Re: 2 Fragen zu Result
 
du kannst allerdings auch den Nahmen der function hinschreiben...

Die Muhkuh 26. Nov 2003 19:35

Re: 2 Fragen zu Result
 
d.h. ich könnt was rechnen lassen:

Delphi-Quellcode:
function Rechnen (a,b,c,d, er: Integer): Integer;
begin
  a := 239;
  b := a * 34;
  c := a * b * 23M;
  d := a * 4 - b / c;
  er := a * b - c + d;
  Result := er;
end;

procedure Form.Show;
begin
  showmessage(inttostr(Rechnen(Result));
end;
Oder versteh ich da was falsch???

Luckie 26. Nov 2003 19:36

Re: 2 Fragen zu Result
 
Probier es doch einfach mal aus und kuck was passeirt... :roll:

Die Muhkuh 26. Nov 2003 19:38

Re: 2 Fragen zu Result
 
Zitat:

Zitat von Luckie
Probier es doch einfach mal aus und kuck was passeirt... :roll:


Ich glaub dsa ist die einfachste Lösung

Die Muhkuh 26. Nov 2003 19:42

Re: 2 Fragen zu Result
 
So hab es ausprobiert und bin begeistert!

Mein Code den ich ausprobiert hab:
Delphi-Quellcode:
function Rechnen (a,b: Integer): Integer;
begin
  result := a + b;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := inttostr(Rechnen(strtoint(Edit1.text),strtoint(Edit2.text)));
end;
Ist echt nützlich das Result!

Muss man das denn immer angeben wenn man funktionen schreibt (z.b REchenfunktionen)?

Florian H 26. Nov 2003 19:45

Re: 2 Fragen zu Result
 
was angeben?
Du musst der Funktion halt nen Namen geben :stupid:

Luckie 26. Nov 2003 19:54

Re: 2 Fragen zu Result
 
Nun ja, wenn du den result in der Funktion keinen Wert zuweist, dann gibt sie nichts oder nur etwas undefiniertes zurück. Liegt alsi im eigenem Interesse result zu setzten.

Robert Marquardt 27. Nov 2003 06:25

Re: 2 Fragen zu Result
 
Der Unterschied von Result und der alten Methode mit dem Funktionsnamen ist das Result eine volle lokale Variable ist waehrend beim Funktionsnamen nur die Zuweisung (write-only) garantiert ist.

choose 27. Nov 2003 08:18

Re: 2 Fragen zu Result
 
Sehr gut, Robert :) Das hätte ich als Kontra-Argument inzwischen fast vergessen.

@Spider: Trotzdem ist "die alte Methode" nicht weniger Effizient: Solltest Du die Zuweisung auf Result so platziert haben "wie früher" und lässt es der Typ zu, wird gemäß der Aufrufkonventionen keine "echte Variable" auf dem Stack verwendet sondern lediglich die Register verwendet, wie es bei "der alten Methode" der Fall war...

Die Muhkuh 27. Nov 2003 13:11

Re: 2 Fragen zu Result
 
Zitat:

Zitat von choose
@Spider: Trotzdem ist "die alte Methode" nicht weniger Effizient: Solltest Du die Zuweisung auf Result so platziert haben "wie früher" und lässt es der Typ zu, wird gemäß der Aufrufkonventionen keine "echte Variable" auf dem Stack verwendet sondern lediglich die Register verwendet, wie es bei "der alten Methode" der Fall war...

Was ist denn die "alte Methode" und was ist die "neue Methode" dann?

Robert Marquardt 27. Nov 2003 13:15

Re: 2 Fragen zu Result
 
"Alte Methode" bezieht sich auf das originale Pascal von Wirth.

Die Muhkuh 27. Nov 2003 13:18

Re: 2 Fragen zu Result
 
d
Zitat:

Zitat von Robert Marquardt
"Alte Methode" bezieht sich auf das originale Pascal von Wirth.

NGHX, da hätt ich ja drauf kommen können :oops:

Aber endlich versteh ich das mit dem Result!

Luckie 27. Nov 2003 13:32

Re: 2 Fragen zu Result
 
Wie hast du denn vorher mit Funktionen gearbeitet?

Die Muhkuh 27. Nov 2003 13:37

Re: 2 Fragen zu Result
 
eigentlich hatte ich in den Funktionen nur sowas drin:

Delphi-Quellcode:
var
  a,b,er: Integer;
  a1,b1: String;

function Rechnen : Integer;
begin
  a1 := Edit1.text;
  b1 := Edit2.text;
  a := a1;
  b := b1;
  er := a * b;
end;

procedure Buttonclick(Sender: Tobject);
begin
  Label1.caption := inttostr(er);
end;

Edit: Delphi-Tags vergessen :oops: :wink:

Luckie 27. Nov 2003 13:40

Re: 2 Fragen zu Result
 
Oh Gott alles global. *graus* Da hast du aber OOP mit den Füßen getreten aber richtig deftig.

Wenn du Zugriff auf Objekte der Form brauchst, dann mach deine Funktion zu einer Methode deiner Form-Klasse.

Die Muhkuh 27. Nov 2003 13:43

Re: 2 Fragen zu Result
 
upsi, alles Global geschrieben...

Ne normalerweiße schreib ich es dann so:
Delphi-Quellcode:
var
  er: Integer;

function Rechnen (a,b : Integer; a1,b1: String) : Integer;
begin
  //dat von oben
end;

Die Muhkuh 27. Nov 2003 13:45

Re: 2 Fragen zu Result
 
Zitat:

Zitat von Luckie
Wenn du Zugriff auf Objekte der Form brauchst, dann mach deine Funktion zu einer Methode deiner Form-Klasse.

Wie denn? :oops:

himitsu 27. Nov 2003 13:49

Re: 2 Fragen zu Result
 
http://www.FrankNStein.de/Smiley-Wolke.gif Na ihr,

ganz identisch sind die beiden Schreibweisen mit Funktionsname und Result nun auch nicht. :wink:

Hier kommt 2 raus:
Delphi-Quellcode:
Funktion Test: Integer;
  Begin
    Result := 1;
    Result := Result + 1;
  End;

Und das ergibt eine super schöne Endlosschleife: :mrgreen:
Delphi-Quellcode:
Funktion Test: Integer;
  Begin
    Test := 1;
    Test := Test + 1;
  End;
http://www.delphipraxis.net/images/common/divider.jpg
http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif

Luckie 27. Nov 2003 13:49

Re: 2 Fragen zu Result
 
Code:
type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
    [b]function Devide(a, b: Integer): Integer[/b];
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

[b]function Tform1.Devide(a, b: Integer): Interger;
begin
  result := a div b;
end;[/b]
Innerhalb der Funktion hast du jetzt Zugriff auf Objekte des Formulares.

Die Muhkuh 27. Nov 2003 15:43

Re: 2 Fragen zu Result
 
@Luckie


oh so einfach!



@himitsu

Stimmt!


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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