In diesem Teil der Sprachlogik möchte ich mich mit Schleifen (while(), for()), Funktionen (function()) IF-Anweisungen, Operatoren und Makros beschäftigen.
Ich bezeichne als Sprachlogik die Grundlegenden Funktionen, die es bei so gut wie allen Programmiersprachen gibt. Manchmal haben diese andere Namen (wie z.b. in TurboPascal: Funktionen nennen sich dort „Prozeduren“), aber im Grunde erfüllen Sie den gleichen Zweck. Dies beschreibt natürlich auch Kommentare, welche es auch schon bei der Stapelverarbeitung (Batch-Programmierung) gab (Befehl: rem).
Operatoren
In AutoIT gibt es einen Standard-Satz von logischen, mathematischen und Vergleichsoperatoren. Ich denke, dazu muss ich nicht mehr viel sagen – hier eine Liste:
Makros
Markos beschreiben in AutoIT soetwas wie Umgebungsvariablen. Sie enthalten Informationen, die sehr einfach abgerufen werden können. Makros erkennt man an dem führenden „@“.
Alle hier aufzulisten würde den Rahmen sprengen – da verweise ich auf die AutoIT-Manual. Aber um einige genannt zu haben:
@HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR, @OSType, @ComputerName, @UserName, @MyDocumentsDir, @WindowsDir, @TempDir, @error
Diese können ganz einfach im Script aufgerufen werden:
1 |
MsgBox(0, "Jahr", "Wir schreiben das Jahr: " & @YEAR) |
Dies würde dann „2007“ ausgeben.
IF-Then-Else
Mit IF-Anweisungen lassen sich einfache Fallabfragen realisieren. Geprüft wird immer eine oder mehrere Bedingungen, wenn Sie zutreffen, wird ther „Then“-Teil ausgeführt. Im Gegensatz zu anderen Sprachen kann man den Zuweisungsoperator „=“ auch als Vergleichsoperator nutzen.
Ein Beispiel:
1 2 3 4 5 6 7 8 9 |
$var = 5 IF $var = 1 Then MsgBox(0, "Status", "$var ist 1!") EndIf IF $var = 5 Then MsgBox(0, "Status", "$var ist 5!") EndIf |
Man kann dies natürlich anhand eines Else-Statements vereinfachen:
1 2 3 4 5 6 7 |
$var = 5 IF $var = 1 Then MsgBox(0, "Status", "$var ist 1!") ElseIf $var = 5 Then MsgBox(0, "Status", "$var ist 5!") EndIf |
Was aber nun, wenn in jedem anderen Fall ($var ist NICHT gleich 1 und NICHT gleich 5) etwas passieren soll? Richtig! Else:
1 2 3 4 5 6 7 8 9 |
$var = 5 IF $var = 1 Then MsgBox(0, "Status", "$var ist 1!") ElseIf $var = 5 Then MsgBox(0, "Status", "$var ist 5!") Else MsgBox(0, "Information", "$var ist NICHT 5 und NICHT 1!") EndIf |
While-Schleife
In AutoIT können ebenso While-Schleifen (Kopfgesteuerte Schleifen) genutzt werden. Dieser wird – wie von anderen Sprachen bekannt – eine Bedingung übergeben. Solange diese Bedingung zutrifft, oder nicht „manuell“ abgebrochen wird, wird der Schleifen-Text ausgeführt. Ein Beispiel:
1 2 3 4 5 6 7 |
$i = 0 while $i <= 10 MsgBox(0, "$i ist...", $i) $i++; ; $i++ hat den selben Effekt wie $i = $i + 1 WEnd |
Schleifen können auch abgebrochen werden:
1 2 3 4 5 6 7 |
$i = 0 while 1 IF $i > 50 Then ExitLoop EndIf $i++; WEnd |
For-Schleife
Nun, ich denke, ein einfaches Beispiel sagt mehr als tausend Worte:
1 2 3 4 |
For $i = 5 to 1 Step -1 MsgBox(0, "Countdown!", $i) Next MsgBox(0,"", "Fertig!") |
Funktionen
Man geht von folgender Situation aus: Man möchte an mehreren Stellen in einem Programm eine Berechnung durchführen. Es werden mehrere Zahlen eingelesen, die mtieinander addiert werden sollen.
Nun könnte man an jeder dieser Stellen die Gleichung $ergebnis = $a + $b + $c schreiben. Auf dauer, und gerade bei komplizierteren Gleichungen ergibt das sehr viel Code – der doch irgendwie gleich ist.
Hier kommen Funktionen ins Spiel: Funktionen drücken sich „Allgemein“ aus, und tun nichts weiter als Blackbox spielen: Man wirft zwei Äpfel rein, und raus kommt eine Birne.
Dies hat natürlich auch den Vorteil, dass es dem Programmierer, der davor sitzt, egal sein kann, wie genau aus zwei Äpfeln eine Birne wird. Dieser Fakt ist wichtig: Es ist heute nicht mehr nötig, dass jeder Programmierer ein kluger Mathematiker sein muss, der sich mit den Begebenheiten der Naturwissenschaften auskennt – er muss nur eine Funktion nutzen, die ein solcher geschrieben hat.
1 2 3 |
Func summe($a, $b) ; Der Funktion sollen zwei Zahlen übergeben werden return $a + $b ; Rückgabewert: $a + $b EndFunc |
Funktionen müssen KEINE Parameter übergeben werden:
1 2 3 4 5 |
Func uhrzeit() ; Gibt die Uhrzeit im Format H:i aus local $time ; Festlegen einer lokalen Variable $time = @Hour & ":" & @Min return $time EndFunc |