Quellcode Formatierung

  • 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
    [autoit]


    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

    [/autoit]


    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
    [autoit]


    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

    [/autoit]


    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:

    [autoit]

    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
    [autoit]


    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

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

    Func funktion()
    For $i = 1 To 50
    For $x = 1 To 10
    If $x < 5 Then
    Return
    EndIf
    Next
    Next
    EndFunc ;==>funktion

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

    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:

    Code
    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
    [autoit]


    #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

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

    #Region Funktionen
    Func funktion()
    For $i = 1 To 50
    For $iX = 1 To 10
    If $iX < 5 Then
    Return
    EndIf
    Next
    Next
    EndFunc ;==>funktion

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

    Func newfunc()

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

    EndFunc ;==>newfunc
    #EndRegion Funktionen

    [/autoit]

    Sonstiges
    Bei if-Abfragen gibt es ein

    [autoit]

    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

    3 Mal editiert, zuletzt von stayawayknight (28. Oktober 2010 um 20:28)

  • Nicht schlecht, aber bei den Regionen hat sich ein kleiner Fehler eingeschlichen.
    #Region startet einen Block, der mit #EndRegion beendet wird. Dann funktioniert auch das Code-"Falten" in SciTE4AutoIt an den Regionsgrenzen ;)

    [autoit]

    ;===========================================================================================================
    #Region Meine Region

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

    ; das ist ein Abschnitt, der eingeklappt werden kann
    ; die Kommentare davor und danach sind dazu da, den Block in
    ; eingeklapptem Zustand besser zu erkenne.

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

    #EndRegion Meine Region
    ; EndRegion =================================================================================================

    [/autoit]