Funktionsparameter auf 'Default' abprüfen

    • Offizieller Beitrag

    Hi,
    in Funktionen ist es sinnvoll für optionale Parameter das Keyword 'Default' für den Aufruf zuzulassen. Andererseits ist es in vielen Standardfunktionen Usus für Defaults die '-1' oder einen Leerstring zu verwenden.
    Somit kann es sinnvoll sein, in eigenen Funktionen mehrere Defaults zuzulassen. Um die Abfrage zu vereinfachen habe ich die Funktion _IsDefault() erstellt.

    Mögliche Verwendung:

    [autoit]

    ConsoleWrite(_MyFunc('Klaus', '') & @CRLF)
    ConsoleWrite(_MyFunc('Fritz', -1, 'Peter') & @CRLF)
    ConsoleWrite(_MyFunc('Karla', Default, 'Susi') & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Func _MyFunc($a, $b='Lisa', $c='Emil')
    If _IsDefault($b, '-1,', ',') Then $b = 'Lisa' ; gültig sind: -1, Leerstring u. Default
    Return $a & ' ' & $b & ' ' & $c
    EndFunc

    [/autoit]
    _IsDefault()
    [autoit]

    ;===============================================================================
    ; Function Name: _IsDefault($var, $sOtherDefaults='-0', $sDelim=Default)
    ; Description: Prüft ob Funktionsparameter mit einem/mehreren Defaultwert/en aufgerufen wurde
    ; Parameter(s): $var - auf Defaultwert zu prüfende Variable (auf 'Default' wird immer geprüft)
    ; optional $sOtherDefaults - trennzeichenbasierter String mit anderen Werten,
    ; die auch zur Erkennung als "Default" möglich sind
    ; optional $sDelim - Trennzeichen in $sOtherDefaults, Standard ist 'GUIDataSeparatorChar'
    ; Return Value(s): 1 - Variable wurde mit einem Default aufgerufen
    ; 0 - Variable enthält keinen Defaultwert
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _IsDefault($var, $sOtherDefaults='-0', $sDelim=Default)
    Local $aDef[1] = [0], $match = 0
    If IsKeyword($sDelim) Then $sDelim = Opt('GUIDataSeparatorChar')
    If $sOtherDefaults <> '-0' Then $aDef = StringSplit($sOtherDefaults, $sDelim, 1)
    If Not $aDef[0] Then Return IsKeyword($var)
    For $i = 1 To $aDef[0]
    If $var = $aDef[$i] Then $match = 1
    Next
    If Not $match Then Return IsKeyword($var)
    Return 1
    EndFunc ;==>_IsDefault

    [/autoit]
  • schön schön, ist sicherlich praktisch ^^ (für manche) <= das hast du als antwort auf einen thread gemacht *hust*
    aber praktisch, wenn man das braucht, mir reichen meistens die standartwerde, aber die durch default zu ersetzen ist gut, dann muss man nur nachgucken, wenn es nicht in der api eingetragen ist (es lässt sich eine udf ja leicht in die api installieren ^^, bzw eintragen)