Scripting-Hilfe: Grundkurs 2 – Variablen

So umfangreich die Funktionen in mAirList auch sind, so fehlt doch immer wieder mal das eine oder andere Feature für den gewünschten Zweck. Macht aber nichts, denn genau hierfür gibt es die Scripting-Engine, mit welcher die Möglichkeiten in mAirList noch wesentlich umfangreicher werden als ohnehin schon. Also:

Scripting verstehen lernen: Variablen.

Alleine das Wort klingt schon ein wenig nach iih! Aber keine Angst, das gibt sich gleich.

Wenn ein Rechner mit Hilfe eines Computerprogrammes etwas sinnvolles tun soll, dann kommt man um diese Variablen nicht herum. Variablen sind Sachen, die sich der Rechner merken soll, damit er sie z. B. mit anderen Werten vergleichen kann. Und sie dann verändern. Oder etwas ausrechnen und dem Benutzer mitteilen. Diese Sachen können Zahlen sein, oder Buchstaben bzw. Wörter oder Sätze, oder sie beschreiben, ob eine Aussage zutrifft oder nicht.

Eine Variable ist, grob gesprochen, ein Zettel an der Kühlschranktür, auf dem etwas steht, wie „Sellerie“ oder eine Telefonnummer. Was wir dann mit diesen Informationen machen, bestimmt in diesem Fall unser Hirn. (Ist auch ein Rechner.) Manchmal fällt uns auch noch etwas dazu ein, z. B. hat die bessere Hälfte den Sellerie schon eingekauft, und bei der abendlichen Bloody Mary bemerken wir, daß eine wichtige Zutat zur Neige geht. Dann schreiben etwas auf den Zettel dazu, und schließlich steht da „Selleriesalz“. Wir haben die Variable verändert, eine Operation ausgeführt.

All das kann der Rechner auch, allerdings nicht von sich aus. Denn wenn ich einfach Sellerie auf der Tastatur eingebe, passiert in der Regel gar nichts. Wir müssen dem Rechner also sagen, was er damit anfangen soll.

Und damit er etwas damit anfangen kann, müssen wir ihm erstmal den Zettel vorstellen, auf dem hinterher etwas stehen soll, eben „S.“ oder obige Telefonnummer. (Es scheint so, daß der Kühlschrank intelligenter ist als der Rechner, denn dem müssen wir nicht vorher sagen: „Hallo Kühlschrank, was ich Dir jetzt anbappe ist ein Zettel, und da steht eine Telefonnummer drauf.“ Das ist jedoch ein Trugschluß, weil in diesem Falle unser Hirn diese Aufgabe übernimmt, ohne daß wir es merken. Aber ich schweife ab.)

Also machen wir genau das und sagen dem Rechner, mit welchen Zetteln Variablen er es im Verlaufe des Programmes zu tun haben wird. Wer die vorhergehende Folge gelesen und es behalten hat (oder auf einen Zettel geschrieben), der weiß, daß man dafür zu Anfang eines Programmes einen speziellen Abschnitt schafft mit der Überschrift

var

Dahinter folgt die Vorstellung, die Deklaration der Variablen. (Technisch gesehen reserviert der Rechner damit ein Stückchen Speicher für den späteren Gebrauch.)

So weit, so gut, aber hier muß ich noch etwas weiter ausholen. Der Rechner ist da nämlich eigen und will nicht einfach nur gelbe Zettel angeklebt, sondern für jede Sorte Aufschrieb ein anderes Papier. Liniiertes für den Sellerie, und Kästchen für die Telefonnummer. Es gibt verschiedene Variablentypen. (In Wirklichkeit macht er das nicht um uns zu ärgern, sondern weil er Speicherplatz sparen will, denn ein einfaches „Ja“ nimmt weniger Platz weg als z. B. der Titel einer Langspielplatte.)

Im Zusammenhang mit mAirList-Skripten bekommen wir es im wesentlichen mit drei Variablentypen zu tun: Der sogenannten integer, das sind ganze Zahlen, also ohne Kommastellen, die auch negativ sein können. Genau genommen können sie von -2147483648 bis 2147483647 gehen, was in den meisten Fällen ausreicht. Außerdem brauchen wir noch Variablen vom Typ string, das sind Zeichenfolgen, also Buchstaben, Zahlen und Sonderzeichen, was eben ASCII oder UTF-8 so hergeben. Und es gibt den Typ boolean, der beschreibt, ob Aussagen zutreffen oder nicht. Diese Variable kann nur zwei Werte annehmen: wahr (true) oder falsch (false).

(Und es gibt, neben vielen anderen, auch noch den Typ TDateTime, das ist eine Zahl mit Kommastellen, wobei vor dem Komma das Datum und nach dem Komma die Uhrzeit steht. Kriegen wir vielleicht später.)

Wir sind dann aber immer noch nicht fertig, denn außer dem Typ braucht eine Variable auch noch einen Namen, damit der Rechner sie wiedererkennen kann. Den können wir uns frei ausdenken, allerdings gibt es Einschränkungen: Der Name muß mit einem Buchstaben oder Unterstrich beginnen, 2Bier oder %Alkohol sind verboten. Außerdem dürfen keine Schlüsselwörter oder Anweisungsnamen wie if verwendet werden, aber das ist ja eh klar.

Bei der Benennung hilft es für das spätere (und auch schon frühere) Verständnis des Codes ungemein, wenn man sprechende Namen verwendet, also vielleicht NeuerTitel für die Definition eines neuen Titels oder maxTitelLänge für dessen größte Länge.

Und es gibt noch was praktisches: Die sogenannten Arrays. Das ist eine Vorrichtung, in der mehrere Variablen durchnumeriert und zusammengefaßt werden, allerdings müssen die dann vom selben Typ sein.

Und jetzt geht es endlich ans deklarieren!

var
  EncoderEingeschaltet: boolean;
  Hausnummer, i, j, k: integer;
  TitelName, AlbumName, Ort: string;

  Encoder: array [0..9] of integer;
  EncoderName: array [0..9] of string;
  …

Man sammelt also seine Variablennamen gleichen Typs und schreibt sie, durch Kommata getrennt, hintereinander. Dann kommt ein Doppelpunkt und der Variablentyp, fertig. (Und immer schön die Semikola ans Ende der Zeile!) Die Arrays werden so deklariert, wie ich es da geschrieben habe, und das bedeutet in diesem Beispiel, daß es dann die zweimal zehn Variablen

Encoder[0]
Encoder[1]
Encoder[2]
…
Encoder[9]

und

EncoderName[0]
…
EncoderName[9]

gibt. Später kann man das mit weiteren Variablen verwursten, z. B. als

EncoderName[k]

Außerdem gibt es noch die sogenannten Konstanten, das sind so etwas wie Variablen, die aber nicht variabel sind. Sie behalten die ganze Zeit denselben Wert und werden in einem eigenen Abschnitt deklariert:

const
  maxEncoder = 12;

Ein passender Typ wird der Konstanten vom Rechner automatisch zugewiesen, außerdem wird die Konstante gleich initialisiert, d. h., sie bekommt einen Wert, was man bei Variablen separat machen muß.

Also initialisieren: Noch weiß der Rechner den Wert der Variablen nicht, also was auf den Zetteln eigentlich steht. Deshalb definieren wir das, und zwar mit Doppelpunkt und Gleichheitszeichen:

Index := 0;
AlbumName := 'Abbey Road';

Merken: Die Strings, also Buchstaben usw., stehen immer zwischen einfachen Hochkommas!

Es ist zweckmäßig, zu Beginn eines Programmes allen Variablen einen Wert zuzuweisen, sie zu initialisieren, sonst weiß der Rechner wieder nicht so recht, was er damit soll. In mAirlist-Hintergrundskripten eignet sich dafür die Prozedur OnLoad, die beim Laden des Skripts (also beim Start von mAirList) ausgeführt wird:

procedure OnLoad;
  EncoderEingeschaltet := false;
  Hausnummer := 3;
  // usw.

Später können wir dann diese Variablen verändern, indem wir z. B. schreiben

Index := Index + 99;

Mathematisch gesehen ist das natürlich Unsinn, aber das Gleichheitszeichen bedeutet hier etwas anderes, keine Feststellung „aha, isso“, sondern einen Imperativ, etwa: soll sein. Der vorherige Wert von Index wird also um 99 erhöht. Das geht auch mit Buchstaben:

AlbumName := AlbumName + ' ' + '(Remastered Version)';

ergibt in unserem Beispiel

'Abbey Road (Remastered Version)'

Man beachte das Einfügen eines Leerzeichens zwischen den Hochkommas in der Mitte.

Will man eine Zahl vom Typ integer in einen String einbauen, geht das nicht ohne weiteres, sondern man bedient sich der Routine IntToStr( ), also

Ort := IntToStr(Hausnummer) + ' ' + AlbumName;

ergibt in unserem Beispiel für Ort:

'3 Abbey Road' 

Puh, das war jetzt ein Riesenhaufen Text für eigentlich relativ wenig Zeug, aber ich bin ja selber schuld, mit Kühlschrank und so. Also erstmal denselben öffnen, ein kühles Getränk entnehmen und sacken lassen. Aber wenn man genau guckt, ist es doch gar nicht so kompliziert, und ein Blick auf fertige Skripte kann in diesem Sinne auch sehr aufschlußreich sein.

Deklarierte Grüße

TSD