Funktionen mit optionalen Parametern aufrufen

  • Hi Fachmenschen,

    ich habe eine grundsätzliche Frage zur Gestaltung eigener UDF's.

    Als Beispiel nehme ich den Aufruf einer eigenen UDF:

    [autoit]

    function("a", "b", "c")

    [/autoit]

    Die Funktion "function" soll bei mir die übergebenen Werte auswerten, und einen davon zurückliefern.

    [autoit]


    Func function($a, $b, $c)
    ...
    EndFunc

    [/autoit]

    An einer anderen Stelle in meinem Script will ich jedoch, dass nur zwei der Werte überprüft werden:

    [autoit]

    function("a", "c")

    [/autoit]

    Die Funktion "function" wird jedoch somit mit der falschen Anzahl an Parametern aufgerufen - was zu einer Fehlermeldung führt.

    Meine Frage:

    Wie gestalte ich am besten eine eigene Funktion, wenn ich festlegen will, dass zum Beispiel der Wert "a" zwingend angegeben werden muss, während die Werte "b" und "c" optional sein können - d. h. bei einem Aufruf von "function()" nicht übergeben werden müssen?

    Danke bereits für Euren Rat.

  • optionale Parameter müssen in der Deklaration einen Wert zugewiesen bekommen der dann benutzt wird wenn der Parameter im Funktionsaufruf nicht verwendet wurde.

    soll heißen:

    [autoit]

    Func function($a, $b = 0, $c = '')
    ;....
    If $b = 0 Then ConsoleWrite("2. Parameter wurde nicht benutzt")
    ;....
    EndFunc

    [/autoit]
  • @ Xenobiologist,

    vorbelegen... ?!

    [autoit]

    Func function($a=12, $b=0, $c=0); $a Default = 12

    [/autoit]
    • Offizieller Beitrag

    Hi,

    jein. Eigentlich meinte ich, dass bei mehreren optionalen Parametern die Situation auftreten kann, dass der erste eigentlich standard gelassen werden soll und man den zweiten anpassen will.

    Nun stellt sich die Frage was willst du dem User anbieten, um den Parameter zu überspringen. Hier kann man Default nutzen und Default dann innerhalb der Funktion zu dem machen, was man wirklich als Default versteht.

    So long,

    Mega

  • @ Xenobiologist,

    okay, das habe ich jetzt auch verstanden. Dank Dir für diesen Hinweis!

    Zur Erläuterung, was ich eigentlich vor hatte:

    Ich hatte mir eine Funktion gebastelt, die

    a) Daten aus einem Array (Sektion einer Ini-Datei) bezieht, wenn die entsprechenden Values auch in der Ini-Datei stehen, oder b)

    b) einen Key und einen Value in die Ini-Datei schreibt, wenn die entsprechenden Einträge nicht vorhanden sind.

    Hierzu brauchte diese Funktion zunächst 4 Parameter.

    Nun wollte ich für eine andere, jedoch vergleichbare Abfrage nicht ständig 4 Parameter übergeben, da mindestens 2 dieser Parameter von der Funktion selber "generiert" werden.

    Auch wollte ich keine neue Funktion mit 2 Parametern scripten.

    Mit Deiner und Aspirin-Junkies Lösung konnte ich mein Problem jedoch prima lösen, und erkenne darüber hinaus noch andere Einsatzmöglichkeiten für mein Projekt.

    *Zufrieden bin* - und Danke!

  • ||

    Wenn ein Parameter vorbelegt wird und auf Benutzung abgefragt wird, ist zusätzlich drauf zu achten, dass der übergebende Parameter niemals gleich dem Vorbelegten sein kann.

    ||

    Einmal editiert, zuletzt von zio82draw (29. Oktober 2007 um 11:15)