Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Rückgabewerte von Funktionen und Prozeduren (https://www.delphipraxis.net/6221-rueckgabewerte-von-funktionen-und-prozeduren.html)

Hansa 3. Jul 2003 15:20


Zitat:

Zitat von sakura
Na dann ändere mal. Eine Prozedure kann keinen Rückgabewert haben.

Da bitte ich aber mal um Erläuterung.

[================================================]
Dieser Thread wurde von folgendem Thread abgetrennt, da die Inhalte beide diskussionswürdig sind, allerdings verschieden Voraussetzungen mit sich bringen.
http://www.delphipraxis.net/viewtopic.php?t=6884

Mit freundlichen Grüßen,
SAKURA

sakura 3. Jul 2003 15:36

Zitat:

Zitat von Hansa
Da bitte ich aber mal um Erläuterung.

Was genau willst Du hören. var-Parameter sind keine Rückgabewerte ;-)

Ich quotiere doch glatt noch einmal den Delphi-Language Guide:
Zitat:

Code:
[b]Prozedurdeklarationsabschnitt [/b]-> Prozedurdeklaration
                              -> Funktionsdeklaration
[b]Prozedurdeklaration [/b]-> Prozedurkopf ';' [Direktive] [Portabilitäts-Direktive]
                       Block ';'
[b]Funktionsdeklaration [/b]-> Funktionskopf ';' [Direktive] [Portabilitäts-Direktive]
                     Block ';'
[b]Funktionskopf [/b]-> FUNCTION Bezeichner [Formale Parameter] ':' (Einfacher Typ | STRING)
[b]Prozedurkopf [/b]-> PROCEDURE Bezeichner [Formale Parameter]
[b]Formale Parameter [/b]-> '(' Formaler Parameter ';'. ')'
[b]Formaler Parameter [/b]-> [VAR | CONST | OUT] Parameter
[b]Parameter [/b]-> Bezeichnerliste [':' ([ARRAY OF] Einfacher Typ | STRING | DATEI)]
          -> Bezeichner ':' Einfacher Typ '=' Konstanter Ausdruck

Darin ist der Aufbau einer Prozedur und einer Funktion sehr gut erklärt. Beide können optional eine Parameterliste haben. Eine Funktion liefert einen Ergebniswert zurück, wohingegen eine Prozedure dieses nicht tut. Beide können jedoch variable Parameter haben, welche auch Ausgabewerte aufnehmen können.

...:cat:...

Hansa 3. Jul 2003 15:44

Ach du Schande, Sakura bringt tatsächlich die Grammatik. Hätte ich das vorher gewußt. :mrgreen:

Aber was hindert einen daran, den VAR Paramter als Rückgabewert zu benutzen. Wie bei einer Funktion :?:

sakura 3. Jul 2003 16:00

Wie gesagt, ich habe geschreiben, das man var-Parameter nutzen kann, aber das sind keine Prozedur-Rückgabe werden, es sind halt "[in|out] Parameter", welche einen Rückgabewert aufnehmen kann. Es ist ein kleiner, feiner Unterschied.

...:cat:...

Hansa 3. Jul 2003 16:19

Dann schreibe doch wenigstens, warum. :shock: Man kann eine Prozedur nicht so übergeben:
Delphi-Quellcode:
var i : integer;

i := procedure Iwert

aber schon als i := IFunction, wobei:

Function IFunction : integer;
Pseudocode halt :mrgreen:

sakura 3. Jul 2003 16:24

Hansa, Du hast mit Deinem Ansatz aber völlig am Problem vorbei manövriert. Es geht hier um "Prozedurvariablen", welche eigentlich Pointer sind. Damit würde auch folgender Code problemlos gehen (Zuweisung einer Prozedur auf eine "Prozedurvariable")
Delphi-Quellcode:
procedure Oehm(X, C: Integer);
begin
  ShowMessage(IntToStr(X + C));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  F: procedure (A, B: Integer);
begin
  F := Oehm;
  F(1, 2);
end;
Dabei wird Owhm F zugewiesen. Oehm ist eine Prozedur.

...:cat:...

CepheidenX 3. Jul 2003 16:36

Worum gehts denn hier eigentlich noch? Sicher doch nicht um den unterschied zwischen Funktionen (gibt einen Funktionswert zurück) und Prozeduren (gibt keinen Funktionswert zurück).
Das ist doch wieder so ein Punkt den C-Programmierer nehemn um Pascal bzw Delphi schlecht zumachen. Denn sie meinen es ist verwirrend da zu unterscheiden, immerhin gibt es in C ja nur Funktionen (mit und ohne Rückgabewert).

Was die Parameterübergabe bei Prozeduren angeht, da sollte man erstmal in die Online Hilfe schauen :-)
Stichwort: Parameter

Hansa 3. Jul 2003 16:42

Zitat:

...Funktionen (gibt einen Funktionswert zurück) und Prozeduren (gibt keinen Funktionswert zurück)...
Eine Prozedur gibt keinen Funktionswert zurück, aber einen VAR-Parameter. Eine Function gibt nur EINEN zurück, Prozeduren mehrere.

CepheidenX 3. Jul 2003 16:52

Das sind aber Parameter! da steckt ein andere Mechanismus hinter.

In Delphi gibt es 4 Parameterformen (Wert-, (Var) Variablen-, (const) Konstanten- oder (out) Ausgabeparameter) sie geben an wie die Variablen in der Routine behandelt wird.

Bei VAR-Parametern wird KEINE neue Variable erzeugt, wie bei den anderen. im Prinzip wird nur ein Zeiger übergeben. Somit haben verönderungen in der Subroutine direkte Auswirkungen auf die Variable.

Im Prinzip würde das auch bei Funktionen gehen. Aber Borland hat das eben nicht so vorgesehen.

Hansa 3. Jul 2003 17:12

Zitat:

Zitat von CepheidenX
...Bei VAR-Parametern wird KEINE neue Variable erzeugt, wie bei den anderen...

Kommst Du etwa aus der falschen Richtung ? Oder ich ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz