Hallo liebe Com,
da ich etwas ähnliches nicht finden konnte, möchte ich hier einmal (vor allem für die Anfänger) erklären, wie man den Quellcode für alle sauber lesbar formatieren kann.
Einrücken und Zeilenumbrüche
Einrücken:
Folgendes Script ist nur sehr schwer lesbar:
Spoiler anzeigen
While 1
For $i = 1 To 20
$mauspos=MouseGetPos()
If $mauspos[0]<50 Then
MsgBox(0, "kleiner", "kleiner 50")
Else
If $mauspos[1]=10 Then
funktion()
EndIf
EndIf
Next
WEnd
Func funktion()
For $i=1 To 50
For $x = 1 To 10
If $x<5 Then
Return
EndIf
Next
Next
EndFunc
Um diesen Quellcode übersichtlicher zu formatieren, bietet es sich an den Quellcode entweder per Leertaster oder mithilfe der Tabulatortaste sauber einzurücken. Stattdessen kann man auch einfach die Tidy-funtkion von Scite benutzen (Strg+t), dann wird der gesamte Quellcode sauber eingerückt und sonstige "Schönheitskorrekturen" werden vorgenommen. Demnach würde das Script nun so aussehen:
Spoiler anzeigen
While 1
For $i = 1 To 20
$mauspos = MouseGetPos()
If $mauspos[0] < 50 Then
MsgBox(0, "kleiner", "kleiner 50")
Else
If $mauspos[1] = 10 Then
funktion()
EndIf
EndIf
Next
WEnd
Func funktion()
For $i = 1 To 50
For $x = 1 To 10
If $x < 5 Then
Return
EndIf
Next
Next
EndFunc ;==>funktion
Der Quellcode ist nun um einiges besser lesbar als davor. Doch man kann noch mehr machen, z.B. mit Zeilenumbrüchen:
Anders als in den meisten Programmiersprachen ist es durch den Autoitcompiler nicht möglich, mehrere Befehle/Funktionen hintereinander ohne Verschachtelung aufzurufen.
Das heißt man muss zwangsweise jeden Befehl in eine neue Zeile schreiben, oder man verschachtelt
mehrere Befehle ineinander. Bsp:
MsgBox(0, "", _StringReverse(StringUpper("Ich bin ein String")))
[/autoit]
Zwischen selbstdefinieren Funktionen empfiehlt es sich immer, einige leere Zeilen zu lassen, dadurch lässt sich alles meist noch besser lesen. Für unser Beispiel:
Spoiler anzeigen
While 1
For $i = 1 To 20
$mauspos = MouseGetPos()
If $mauspos[0] < 50 Then
MsgBox(0, "kleiner", "kleiner 50")
Else
If $mauspos[1] = 10 Then
funktion()
EndIf
EndIf St
Next
WEnd
Func funktion()
For $i = 1 To 50
For $x = 1 To 10
If $x < 5 Then
Return
EndIf
Next
Next
EndFunc ;==>funktion
Func newfunc()
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>newfunc
[/autoit]Variablen
Variablen kann man zwar benennen wie man will, jedoch ist es praktischer wenn man den Variablen und Arrays sinnvolle Namen gibt, an denen man leicht erkennen kann um was für einen Variablentyp es sich handelt.
Oft empfiehlt sich dabei diese Variante, bei der kleine Buchstaben vor den Variablennamen geschrieben werden, dass ist je nach Variablentyp:
a für Arrays ($aMousepos = MouseGetPos() )
b für Binarys ($bBinary = StringToBinary("String")
c/id für Control-ID ($cButton1 = GuiCtrlCreateButton("left", 5, 10, 25, 25) )
o für Object ($oIE = _IE_CreateEmbedded() )
h für Handles ($hGui = GuiCreate("hey") )
t für DLLStructs ($tStruct = DllStructCreate("xx") )
i für Integer ($iZahl = 1 + 2)
s für Strings ($sName = InputBox("Name", "Wie heißt du?") )
n für Float ($nZahl = 1 / 3=
f für Boolean ($fOn = True)
Kommentare
Es hilft, viel zu kommentieren, so findet man sich nach langer Scriptpause schnell wieder im Script zurecht.
Es muss nicht jede einzelne Zeile kommentiert werden, aber nach bestimmten Abschnitten sollte immer mal wieder eine kurze Erklärung folgen. Bei eigens definieren "größeren" Funktionen ist es fast Pflicht, eine Parameterbeschreibung und ähnliches mitzuliefern. (dazu gibt's von Seubo ein sehr schönes Programm, welches dir dabei so manche Arbeit abnimmt: DescribeIt)
Regions
Autoit bietet auch Regionsmarkieren an, mit denen man bestimmte Scriptabschnitte markieren kann.
Es empfiehlt sich eine Markierung zu Beginn des Abschnitts und eine am Ende zu machen.
Der Beginn wird mit #Region markiert, das Ende mit #EndRegion.
Für unser Beispiel von oben:
Spoiler anzeigen
#Region Hauptschleife
While 1
For $i = 1 To 20
$aMauspos = MouseGetPos()
If $aMauspos[0] < 50 Then
MsgBox(0, "kleiner", "kleiner 50")
Else
If $aMauspos[1] = 10 Then
funktion()
EndIf
EndIf St
Next
WEnd
#EndRegion Hauptschleife
#Region Funktionen
Func funktion()
For $i = 1 To 50
For $iX = 1 To 10
If $iX < 5 Then
Return
EndIf
Next
Next
EndFunc ;==>funktion
Func newfunc()
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>newfunc
#EndRegion Funktionen
Sonstiges
Bei if-Abfragen gibt es ein
ElseIf
[/autoit]. Dadurch brauchst du nicht mehrere If-Abfragen zu koppeln. Bei vielen dieser ElseIfs
eignet sich meist eine Select-Abfrage oder eine Switch-Abfrage besser.
An den Plus-Minus Zeichen am Rand von Scite, könnt ihr bestimmte Codeabschnitte (Schleifen, Funcs, Regionen, Abfragen) "falten", also einklappen. So könnt ihr bereits fertige Scriptteile ausblenden.
Wenn mir noch was einfällt, werd ich hierdran weiterschreiben, vielleicht habt ihr ja noch Ideen für wichtige Dinge die hier noch unbedingt reingehören!
Danke an Progandy, für die Regionskorrektur und den Hinweis an das Falten in Scite!
Viele Grüße,
stayaway