Es gibt auch in Inform 7 die üblichen Kontrollstrukturen: if-then-else, while, Zählschleife, switch. In Java kann eine solche Kontrollstruktur nicht irgendwo im Code erscheinen, sondern nur innerhalb von Methoden. Das gleiche gilt auch für Inform: Kontrollstrukturen stehen innerhalb von Methoden oder Regeln.
Beispiel: While
To count down: let x be ten; while x is at least zero: say x; decrease x by one.
Nach while
steht wie immer jede Aussage, die als boolescher Wert evaluiert wird.
Dabei benutzt Inform statt der geschweiften Klammern von Java die Einrückung durch Tabulatoren wie in Python. Es gibt auch eine Schreibweise mit expliziter begin
-Markierung, aber die ist unschön.
— Methoden in Inform unterscheiden sich sprachlich leicht voneinander, beginnen aber alle mit dem Wort to. Beispiele:
- Kopf einer Prozedur ohne Rückgabewert und ohne Argument:
To count down:
- Kopf einer Methode mit booleschem Rückgabewert und einem Zahl-Argument:
To decide whether (x - a number) is big:
- Kopf einer Methode mit Rückgabewert von anderem Typ (hier einer Zahl), und einem Zahl-Argument:
To decide what number is the square of (x - a number):
Allerdings braucht man diese Methoden – siehe eigenes Kapitel dazu – in Inform weniger oft. Häufiger trifft man Kontrollstrukturen innerhalb von Regeln, deshalb beschränken sich die folgenden Beispiele auf diese. Methoden werden immer dann ausgeführt, wenn sie im Programmcode explizit aufgerufen werden; Regeln werden dagegen während des Spielzug-Zyklus vom Programm immer wieder zu festgelegten Zeiten auf ihr Zutreffen überprüft und befolgt.
Beispiel: If-then-else
Instead of going west from the Entrance Area: If the player is wearing the white hoodie: If the voice of the player is low: Say "You can't go through there. From inside, you hear voices shouting: 'No, you don't sound like our mother.'"; Otherwise: Continue the action; Otherwise: Say "You can't go through there. From inside, you hear voices shouting: 'No, you're not our mother. Our mother has got white hair.'"
Otherwise if
geht natürlich auch.
Beispiel: Zählschleife
Es gibt einfache Zählschleifen:
After eating the apple: repeat with x running from 1 to 10: say x; say line break; say "Burp."
Dabei wird die Zählvariable bei jedem Durchgang um 1 erhöht, eine andere Möglichkeit gibt es leider nicht direkt.
Viel häufiger verwendet man diese Struktur, um eine Aufzählung oder Liste von Objekten durchzugehen:
repeat with x running through open containers: repeat with x running through things carried by the player: repeat with x running through all books:
Da entspricht in Java: for (Element e : collection)
.
Beispiel: Switch
Every turn: let x be a random number between 1 and 6; if x is: -- 1: say "You hear thunder in the distance."; -- 2: say "A bolt of lightning flashes somewhere far away."; -- otherwise: say "Nothing happens."
Dabei kann eine Variable von beliebigem Datentyp (auch Referenzdatentyp) hergenommen werden:
Every turn: let x be a random thing carried by the player; if x is: -- the apple: say "You play around with the apple, then put it away again."; -- the coin: say "You toss the coin aimlessly for a while."