Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi freiwillige Parameter (https://www.delphipraxis.net/101156-freiwillige-parameter.html)

jjep 9. Okt 2007 09:24


freiwillige Parameter
 
Hallo zusammen

Ich möchte eine eigene Funktion schreiben, bei der man nicht alle Parameter angeben muss:

Delphi-Quellcode:
function Multiplizieren(Faktor1: Integer; Faktor2: Integer; Faktor3: Integer): Integer;
Es sollte bei dieser Funktion jetzt möglich sein, nur zwei Faktoren mitzugeben.
Damit ich die Funktion auch folgendermassen aufrufen kann:
Delphi-Quellcode:
Resultat := Multiplizieren(4,5);
Der Faktor drei sollte dann in der kurz Hilfe in eckigen Klammern erscheinen.

Danke schon mals im voraus

xaromz 9. Okt 2007 09:27

Re: freiwillige Parameter
 
Hallo,

dazu musst Du einen Default-Wert definieren:
Delphi-Quellcode:
function Multiplizieren(Faktor1: Integer; Faktor2: Integer; Faktor3: Integer = 0): Integer;
Wenn Du einen Parameter weglässt, dann wird der Default-Wert genommen.

Das funktioniert aber natürlich nur am Ende der Parameterliste.

Gruß
xaromz

halinchen 9. Okt 2007 09:28

Re: freiwillige Parameter
 
Delphi-Quellcode:
function Multiplizieren(Faktor1: Integer; Faktor2: Integer; Faktor3: Integer = 1): Integer;
edit: Zu spät...

Achja: Da du den Parameter als Konstant markieren musst, kannst du ihn in der Funktion auch nicht mehr verändern.

edit2: Ich quatsche dämmliches Zeugs :wall: ....

SirThornberry 9. Okt 2007 09:29

Re: freiwillige Parameter
 
Oder du übergibst ein Array. Oder wie die Funktion Format ein Array of const.
Denn bei der Variante mit den Defaultwerten würde es ja bedeuten das man diese Werte nicht übergeben kann.

jjep 9. Okt 2007 09:34

Re: freiwillige Parameter
 
OKe alles klar danke vielmals :thumb:

sirius 9. Okt 2007 09:37

Re: freiwillige Parameter
 
Oder noch eine Möglichkeit: Du benutzt die Vorzüge der Aufrufkonvention CDECL.

Delphi-Quellcode:

program Project1;

{$APPTYPE CONSOLE}

function param4(a,b,c,d:integer):integer; cdecl;
begin
  result:=a+b;
end;

var param2:function(a,b:integer):integer; cdecl;
var param3:function(a,b,c:integer):integer; cdecl;


begin
  param2:=@param4;
  param3:=@param4;

  writeln(param2(4,5)       ,' ',
          param3(4,5,2)     ,' ',
          param4(4,5,2,-12) );

  readln;
end.

xaromz 9. Okt 2007 09:39

Re: freiwillige Parameter
 
Hallo,
Zitat:

Zitat von SirThornberry
Denn bei der Variante mit den Defaultwerten würde es ja bedeuten das man diese Werte nicht übergeben kann.

Wie meinen? :gruebel:

Gruß
xaromz

Muetze1 9. Okt 2007 09:39

Re: freiwillige Parameter
 
Wenn es nur um Möglichkeiten geht, dann sollte man auch noch Delphi-Referenz durchsuchenoverload erwähnen.

Muetze1 9. Okt 2007 09:42

Re: freiwillige Parameter
 
Zitat:

Zitat von xaromz
Hallo,
Zitat:

Zitat von SirThornberry
Denn bei der Variante mit den Defaultwerten würde es ja bedeuten das man diese Werte nicht übergeben kann.

Wie meinen? :gruebel:

SirThomberry geht davon aus, das in der Routine eine Sonderbehandlung eingefügt wird, welche die Nutzung des optionalen Parameters ausklammert, wenn diese den angegebenen Defaultwert enthält. Damit wird die Nutzung von genau diesem Defaultwert in der letzten Option ausgeschlossen.

ABER: Da es sich in der Fragestellung um Faktoren handelt (laut Benennung), würde hier ein Default-Wert von 1 den erwünschten Erfolg bringen und keine Sonderbehandlung nötig machen.

/EDIT: Sorry für den Doppelpost - nicht aufgepasst...

SirThornberry 9. Okt 2007 09:47

Re: freiwillige Parameter
 
@Mütze: ok, das stimmt. daran hatte ich nicht gedacht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 1 von 2  1 2      

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