Hi,
ich möchte behaupten, dass ich in AutoIt mittlerweile einigermaßen durchblicke. Drei Sachen sind mir jedoch noch nicht ganz klar:
1. Func...Return...EndFunc:
Der optionale Const-Parameter für eine übergebene Variable wird so gut wie nie genutzt (zumindest bei Funktionen, die mir bisher untergekommen sind!) Entweder ist mir was entgangen, oder alle anderen benutzen ihn einfach nicht, weil er keinen Geschwindigkeitsvorteil bringt oder... Ja, warum? So wie ich das sehe, sind doch (fast) alle Parameter, die man einer Funktion übergibt konstant, es sei denn man will den Wert einer übergebenen Variable direkt ändern, dann benutzt man halt ByRef.
Die Hilfe sagt folgendes dazu:
The Const keyword is optional and indicates that the value of the parameter will not change during the execution of the function. A variable declared Const can only be passed to a function using a Const parameter.
2. Default
Welchen Sinn, macht das Keyword Default? Wenn ich einem Parameter einer Funktion keinen Wert übergeben will, so setze ich ihn im Funktionskopf einfach auf 0 und mache ihn damit optional. Ein standardmäßiges Setzen auf Default, führt ja dazu, dass in der Variablen "Default" steht. Dann müsste ich ja auf "Default" prüfen und die Variable überschreiben, womit sie dann wiederum auch nicht Const sein dürfte. Ich hoffe das Ganze ist noch nachzuvollziehen!
3. Enum
Kann mir jemand ein Beispiel für die Anwendung von einem Enum geben (sinnvoll)?
Hier noch ein wenig Code zur Veranschaulichung:
Spoiler anzeigen
#NoTrayIcon
Opt("MustDeclareVars", 1)
Local Enum $eiCount0, $eiCount1, $eiCount2
Local $aiArray[2] = [0, 1]
_TestFunc0($aiArray, Default)
_TestFunc1($aiArray, Default)
Func _TestFunc0(Const ByRef $avArray, Const $iMODE = 1)
If $iMODE = 1 Or $iMODE = Default Then
MsgBox(0, "_TestFunc0", "Hier würde etwas passieren!" & @CR & "$iMODE: " & $iMODE & @CR & _
"Wenn $iMODE hier gleich 'Default' ist, könnte man nicht mit $iMODE weiter arbeiten!")
Return (1)
EndIf
EndFunc ;==>_TestFunc0
Func _TestFunc1(Const ByRef $avArray, $iMODE = 1)
If $iMODE = Default Then $iMODE = 1
If $iMODE = 1 Then
MsgBox(0, "_TestFunc1", "Hier würde etwas passieren!" & @CR & "$iMode: " & $iMODE)
Return (1)
EndIf
EndFunc ;==>_TestFunc1