Methoden

(Hier geht es vorerst nur um Methoden im engeren und herkömmlichen Sinn. Zu dem Konzept der rules bei Inform: siehe dort.)

Manchmal trifft man in Büchern auf eine Unterscheidung zwischen Prozeduren und Funktionen. Prozeduren sind dabei Routinen ohne Rückgabewert; Funktionen haben dagegen Rückgabewerte.
Inform 7 unterscheidet sprachlich zwischen diesen beiden Formen. Allerdings spielen weder Prozeduren noch Funktionen eine zentrale Rolle beim Anlegen von Spielen. Wichtiger sind die Regeln, die die Benutzereingabe und Textausgabe beeinflussen, aber dazu später mehr.


Die Definition einer Prozedur (ohne Rückgabewert) beginnt mit dem Schlüsselwort “To”, der Methodenname ist üblicherweise eine Verbkonstruktion im Infinitiv:

To count down:
	let x be ten;
	while x is at least zero:
		say x;
		say "[line break]";
		decrease x by one.

In Java wäre das:

void count_down():
	int x = 10;
	while (x>=0) {
		System.out.print(x);
		System.out.println();
		x = x-1;
	}

Natürlich gibt es eine solche Funktion auch mit Argumenten:

To count down from (x - a number):
	while x is at least zero:
		say x;
		say "[line break]";
		decrease x by one.

Dabei ist “a number” der Datentyp des Arguments. Primitive Datentypen sind vor allem: text, number, truth state; aber natürlich könnte dort auch stehen: room, man, person, thing, container und so weiter.

Danach könnte man die erste Methode oben auch einfacher schreiben, indem die Methode ohne Argumente die mit Argument aufruft:

To count down:
	count down from ten;

Zahlen bis 12 kann man in Wörtern schreiben.


Eine Funktion (also mit Rückgabewert) beginnt mit “To decide” und einem passenden Fragepronomen und geht dann etwas anders weiter als eine Methode:

To decide what number is the square of (x - a number):
	decide on x times x.

“What number” legt dabei den Rückgabetyp fest, eine (ganze) Zahl. Stattdessen könnte dort auch stehen “which number” oder “what room”, je nach Datentyp des Rückgabewerts.

Ein bisschen anders und näher am natürlichen Englisch muss man das halten, wenn ein Wahrheitswert zurückgegeben werden soll:

To decide whether (x - a number) is even:
	let the half be x divided by two; [Ganzzahldivision]
	if the half times two is x, decide yes;
	otherwise decide no.

“Whether” (oder auch “if”) impliziert einen Wahrheitswert als Rückgabetyp. In Java hieße die Funktion:

boolean isEven(int x) {
	int half = x/2;
	if (half*2==x) return true;
	else return false;
}

Ein weiteres Beispiel:

To decide what number is (base - a number) to the power of (exponent - a number):
	let the result be one;
	while exponent is greater than zero:
		now the result is the result times base;
		decrease exponent by one;
	decide on the result.

Natürlich beziehen sich Methoden und Funktionen in Spielen meist nicht auf Zahlen, sondern auf Datentypen, die für Spiele wichtiger sind. Eine einfache get-Funktion:

To decide which hat is the favourite of (x - a person):
	decide on the favourite hat of x.

Dabei ist das “which hat” oder auch “what hat” der Rückgabeteyp, (x – a person) das Argument (Klasse: person), das erste “the favourite of” der Bezeichner der Methode und das zweite “the favourite hat of” der Attributsbezeichner.

Und die entsprechende set-Funktion:

To set the favourite of (x - a person) to (z - a hat):
	now the favourite hat of x is z.

oder auch:

To make (z - a hat) the favourite of (x - a person) :
	now the favourite hat of x is z.

Dazu muss man vorher eine Klasse hat angelegt haben: A hat is a kind of thing. It is always wearable.. Außerdem muss die Klasse person um ein Attribut erweitert werden: Every person has a hat called favourite hat.

Allerdings sind die set/get-Methoden ohnehin nicht sehr wichtig, da alle Attribute öffentlich sind.


Aufgerufen werden Methoden und Funktionen (immer innerhalb von anderen Methoden oder Regeln) dann zum Beispiel so:

	count down;
	count down from 15;
	say the square of 4;
	say 2 to the power of 3;
	if 3 to the power of 5 is even:
		count down from 2 to the power of 3;
	if the favourite of Bogart is not the Homburg:
		make the Homburg the favourite of Bogart.

Den Typ des Argument einer Methode kann man noch weiter eingrenzen

To turn over (x - an open portable container):

Dann kann die Methode nur für Container aufgerufen werden, die offen und tragbar sind.
Während open und portable boolesche Attribute sind, die Inform bereits mitbringt, kann man auch weitere solche Adjektive definieren:

Definition: a person is hatless if they do not wear a hat.

Dann kann ich (x - a hatless person) als Argument einer Methode festlegen. Aber das ist alles etwas für später mal.

Schreibe einen Kommentar