Hi,
da ich meinen Coding-Stil momentan umstelle, um schnelleren und übersichtlichern Code zu schreiben, fragte ich mich, ob es nicht irgendwo so etwas wie eine Art "Norm" für AutoIt3-SourceCode gibt. Ich bin auch schnell fündig geworden und zwar hier: User Defined Functions Standard
Das mit der Bezeichnung von Funktionsnamen war mir vorher schon klar, nicht jedoch folgendes:
Originalzitat:
Spoiler anzeigen
ZitatAlles anzeigenVariable Names
[...]
$a<letter> - Array (the following letter describes the data type taken from the rest of the data types below)
$b - Binary data
$h - File or window handle
$i - Integer
$f - Boolean
$n - Floating point number
$s - String
$v - Variant (unknown/variable type of data)
[...]
Deutsche Übersetzung: thx GtaSpider
Spoiler anzeigen
ZitatAlles anzeigen
Variablennamen:
[...]
$a<Buchstabe> - Array (Der folgende Buchstabe beschreibt den Datentyp, entnommen aus den unten stehenden Datentypen)
$b - Binäre Daten
$h - Datei oder Fenster handle (auch ControlIDs)
$i - Integer (Ganzzahlen, z.B.: -1, 0, 1)
$f - Boolean (Wahrheitswerte: False, True)
$n - Floating point number (Gleitkommazahlen, wobei die Variable die Form dddd.dddd hat. dddd kann dabei aus einer oder mehreren dezimalen Zahlen bestehen.)
$s - String (Zeichenkette, z.B.: "Dies ist ein String!")
$v - Variation (Unbekannter / unterschiedliche Datentypen)
[...]
Bei dieser Gelegenheit will ich einmal den Unterschied zwischen Dim / Global / Local erklären:
Dim / Global / Local:
Spoiler anzeigen
Die Dim/Local/Global Schlüsselwörter führen ähnliche Funktionen aus:
1. Sie deklarieren eine Variable bevor man sie nutzt (ähnlich zu VBSkript)
2. Sie erschaffen ein Array
Dabei sollte beachtet werden, dass Dim nicht mehr benutzt werden sollte, Local nur in Funktionen Sinn macht und Global immer ausserhalb von Funktionen eingesetztv wird. Zudem sollte ganz oben im Skript (unter den includes folgendes eingefügt werden:
[autoit]Opt("MustDeclareVars", 1)
[/autoit]Damit wird gewährleistet, dass Variablen vor ihrer Nutzung explizit deklariert werden müssen.
Variablen sollten auch immer nach ihrem Zweck benannt werden (am Besten auf Englisch). Beispiel: $iC ist nicht aussagekräftig, $iCounter hindessen schon:
Opt("MustDeclareVars", 1)
Global $as_fnames[2] = ["Klaus", "Hans"]
Global $f_error = False
MyFunc(182.57)
Func MyFunc(Const $N_TIME = 0.0)
Local $i_multiplier = 60
Return ($i_multiplier * $N_TIME)
EndFunc
Die Frage, die sich mir nun stellt ist, wie benennt man Konstanten (also Variablen, die mit Local Const deklariert wurden...)? Nach der obigen Definition sieht ja jede Variable/Konstante, hier z.B. eine Integerkonstante, so aus:
Local Const $iStartIndex = 1
[/autoit]
Bisher hatte ich mir angewöhnt, Konstanten immer groß und Variablen immer klein zu schreiben, zudem mit dem jeweiligen Bezeichner und einem "_" davor, z.B.:
Local Const $I_STARTINDEX = 1
[/autoit]Dies wäre aber laut dem Standard falsch. Ich möchte ab jetzt meinen Code nach den Standards gestalten, womit aber das Problem bleibt, dass sich Variablen und Konstanten im SourceCode nicht mehr auf Anhieb unterscheiden lassen (Eigentlich nicht so schlimm, würde mich aber interessieren ob es da auch eine bestimmte "Benamsung" gibt).
Da ich zu Anfang bereits Geschwindigkeit ansprach möchte ich hier noch einmal die wichtigsten Erkenntnisse diesbezüglich wiederholen (hier Verweise ich auf den AutoIT SpeedTester
Spoiler anzeigen
ZitatAlles anzeigen1. For/Next loops are champions. Try not to use While/Wend or Do/Until
2. If $Val is faster than If $Val = 1 or $Val = TRUE
3. If $Val = 1 is faster than $Val = TRUE
4. If Not $Val is faster than If $Val = 0 or $Val = FALSE
5. If $Val = 0 is faster than If $Val = FALSE
6. < and > are faster than =, >= or <= (Wow!)
7. $i += 1 is faster than $i = $i + 1
$i -= 1 is faster than $i = $i - 1
$i *= 1 is faster than $i = $i * 1
$i /= 1 is faster than $i = $i / 1
8. If doing a lot of verifications on a single variable:
Switch is fastest, Select is second (but slow) and If is slowest.
9. If $Val is a string, If Not $Val is faster than If $Val = ""
If $Val is faster than If $Val <> ""
10. When doing binary operations, If $Val -128 > 0 is twice as fast
as If BitAnd($Val, 128).
11. Using Hex numbers is faster than using decimal numbers
12 Replacing dec/hex numbers by variables slows down execution. Use hex/dec numbers when possible
13. Longer variable names = longer execution time. Keep variable names short and clear!
14. StringRegExpReplace() is slower than StringReplace(). Use it only if necessary!
15. StringRegExp() is slower than StringInStr(). Use only if necessary!
16. Opt("ExpandEnvStrings",1) makes $Val = "%TEMP%" faster than $Val = EnvGet("temp")
or $Val = @TempDir
17. $Val = @TempDir is faster than $Val = EnvGet("temp")
18. Opt("ExpandVarStrings",1) makes $Val = "$String$" slightly faster than $Val = $String
19. However $Val = "@TempDir@" is slower than $Val = @TempDir (go figure!)
Wer jetzt von Euch denkt, "Und? Wenn interessiert das nun?", der möge diesen Thread ignorieren. Ich bin jedoch immer dafür SourceCode einheitlich (nicht nur meinen untereinander, sondern auch in Bezug zu Anderem) zu halten und schneller zu machen.
EDIT:
- Deutsche Übersetzung der Variablenbenennung hinzugefügt (thx GtaSpider ).
- Erklärung zu Dim / Global / Local hinzugefügt.