![]() |
2 Fragen zu Result
Huhu :hi:
Ich hab mal Fragen zu Result:
Ich hab schon in der OH gelesen aber ich werd echt nicht schlau draus! Kann mir das jemand mal erklären? |
Re: 2 Fragen zu Result
Result ist der Rückgabe-Wert einer Funktion...
Delphi-Quellcode:
...:cat:...
function AddThem(a, b: Integer): Integer;
begin Result := a + b; end; ... ShowMessage(IntToStr(AddThem(5, 6))); |
Re: 2 Fragen zu Result
Result ist eine interne Variable, die den Rückgabewert einer Funktion beinhaltet und zurück gibt.
Delphi-Quellcode:
Ist identisch mit der alten Pascal Schreibweise:
function foo: String;
vsr s: String; begin s := 'Hello world.' result := s; end;
Delphi-Quellcode:
function foo: String;
vsr s: String; begin s := 'Hello world.' foo := s; end; |
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:
Verständlicher?
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; EDIT: HRMPF, wieder letzter :wall: :wink: |
Re: 2 Fragen zu Result
du kannst allerdings auch den Nahmen der function hinschreiben...
|
Re: 2 Fragen zu Result
d.h. ich könnt was rechnen lassen:
Delphi-Quellcode:
Oder versteh ich da was falsch???
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; |
Re: 2 Fragen zu Result
Probier es doch einfach mal aus und kuck was passeirt... :roll:
|
Re: 2 Fragen zu Result
Zitat:
Ich glaub dsa ist die einfachste Lösung |
Re: 2 Fragen zu Result
So hab es ausprobiert und bin begeistert!
Mein Code den ich ausprobiert hab:
Delphi-Quellcode:
Ist echt nützlich das Result!
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; Muss man das denn immer angeben wenn man funktionen schreibt (z.b REchenfunktionen)? |
Re: 2 Fragen zu Result
was angeben?
Du musst der Funktion halt nen Namen geben :stupid: |
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.
|
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.
|
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... |
Re: 2 Fragen zu Result
Zitat:
|
Re: 2 Fragen zu Result
"Alte Methode" bezieht sich auf das originale Pascal von Wirth.
|
Re: 2 Fragen zu Result
d
Zitat:
Aber endlich versteh ich das mit dem Result! |
Re: 2 Fragen zu Result
Wie hast du denn vorher mit Funktionen gearbeitet?
|
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: |
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. |
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; |
Re: 2 Fragen zu Result
Zitat:
|
Re: 2 Fragen zu Result
![]() 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:
http://www.delphipraxis.net/images/common/divider.jpg
Funktion Test: Integer;
Begin Test := 1; Test := Test + 1; End; ![]() ![]() ![]() |
Re: 2 Fragen zu Result
Code:
Innerhalb der Funktion hast du jetzt Zugriff auf Objekte des Formulares.
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] |
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