Sprachlogik in AutoIT #2

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:

AutoIT Operatoren (AutoIT-Manual)

AutoIT Operatoren (AutoIT-Manual)

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:

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:

$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:

$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:

$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:

$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:

$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:

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.

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:

Func uhrzeit() ; Gibt die Uhrzeit im Format H:i aus
   local $time ; Festlegen einer lokalen Variable
   $time = @Hour & ":" & @Min
   return $time
EndFunc

Bastian

Seit 2006 bin ich täglich im IT-Umfeld unterwegs und interessiere mich für technische Lösungen im Hard- und Softwarebereich, die einem den Alltag erleichtern. Zu meinen Hobbies zählt ein 3D-Drucker, das auch (handwerkliche) Tüfteln, Scripten sowie der unqualifizierte Umgang mit dem Lötkolben.

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.