_Self() -- Speichern/Verarbeiten eines Ausdrucks als Selbstbezug

    • Offizieller Beitrag

    Ich kanns einfach nicht lassen - immer wieder überkommen mich neue Ideen. :D

    Also, grundsätzlich kann man das Folgende natürlich mit einer Globalen Variablen im Skript genausogut erledigen.
    Folgende Überlegung:
    - eine Berechnung liefert einen Wert
    - diesen möchte ich mehrfach nutzen
    - in Vergleichsoperationen und/oder Rechenoperationen
    Nun kann ich den Wert natürlich in eine Globale Variable packen und dann skriptweit damit weitermachen.
    Anstelle der Zuweisung zu einer Variablen rufe ich nun die Funktion _Self() auf.
    Der Name ist gut zu merken ;) und das Speichern erfolgt in einer Lokalen Variable.

    Und so sieht es aus:

    Spoiler anzeigen
    [autoit]

    Local $a = 100, $b = 200, $c = 3

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

    _Self($a + $b) ; == initialisieren
    ConsoleWrite('Wert von _self ' & _Self('', 'val') & @CRLF)
    ConsoleWrite('_self < $c ' & _Self($c, '<') & @CRLF)
    ConsoleWrite('_self > $c ' & _Self($c, '>') & @CRLF)
    ConsoleWrite('_self / $c ' & _Self($c, '/') & @CRLF)
    ConsoleWrite('_self * $c ' & _Self($c, '*') & @CRLF)
    ConsoleWrite('_self + $c ' & _Self($c, '+') & @CRLF)
    ConsoleWrite('_self - $c ' & _Self($c, '-') & @CRLF)
    ConsoleWrite('Quadratwurzel aus _self ' & _Self($c, '1/2') & @CRLF)
    ConsoleWrite('Kubikwurzel aus _self ' & _Self($c, '1/3') & @CRLF)
    ConsoleWrite('_self hoch $c ' & _Self($c, '^') & @CRLF)
    _Self(0, 0) ; == entladen (oder mit neuem Wert initialisieren)

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

    ;===============================================================================
    ; Function Name....: _Self
    ; Description......: Statisches Speichern eines numerischen Wertes, Vergleichs- u. Rechenoperationen mehrfach damit
    ; Parameter(s).....: $iVar Beim Initialisieren der zu speichernde Wert, sonst der Wert für die Operation mit dem hinterlegten Wert
    ; $sOp String der festlegt, welche Operation ausgeführt wird
    ; -1 übergebenen Wert initialisieren (Standard)
    ; 0 Wert entladen
    ; '< > = <> <= >=' Vergleichsoperationen ausführen
    ; '+ - * / ^' Rechenoperationen ausführen
    ; '1/2 1/3' Quadrat-, Kubikwurzel ziehen
    ; 'val' gespeicherten Wert zurückgeben
    ; Return Value(s)..: Ergebnis der Operation, gespeicherter Wert, (bei $sOp -1 u. 0 -- nichts)
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _Self($iVar, $sOp=-1)
    Local Static $iSelf =''
    Switch String($sOp)
    Case '-1' ; == $iVar als Basiswert initialisieren
    $iSelf = $iVar
    Case '0' ; == Basiswert entladen
    $iSelf = ''
    Case '<', '>', '=', '<>', '<=', '>=' ; == Vergleichsoperation ausführen
    Return Execute(String($iSelf & ' ' & $sOP & ' ' & $iVar))
    Case '+','-', '*', '/', '^' ; == Rechenoperationen ausführen
    Return Execute('(' & $iSelf & ') ' & $sOp & ' (' & $iVar & ')')
    Case '1/2', '1/3' ; == Quadrat-, Kubikwurzel
    Return Execute('(' & $iSelf & ') ^ (' & $sOp & ')')
    Case 'val'
    Return $iSelf
    EndSwitch
    EndFunc ;==>_Self

    [/autoit]


    Inwiefern es tatsächlich sinnvoll einzusetzen ist, mag jeder für sich bewerten. Aber mir ist das grad so durch den Kopf gerauscht und ihr müßt es ertragen. :rofl: