Fallunterscheidung


Ist eine von mehr als 2 Alternativen auszuwählen, so kann man in Modula 2 die CASE-Anweisung verwenden. Die Idee dazu ist recht alt und in mehreren Programmiersprachen früher schon versucht worden; aber erst in Modula 2 wurde eine wirklich übersichtliche, praktisch brauchbare Notation gefunden.

Eine "CASE-Anweisung" hat folgende Gestalt:

CASE <E> OF <Fälle> ELSE <Rest> END
Die Liste der <Fälle> ist wie folgt aufgebaut:
<Fälle> <Fälle> | <Fall>
<Fälle> <Fall>
Der <Rest> ist eine Anweisungsfolge; der Teil "ELSE <Rest>" kann fehlen.

Die einzelnen Fälle sind also durch den senkrechten Strich " | " getrennt (das war die entscheidende gute Idee, denn alle früheren Ansätze waren schwer lesbar). Der einzelne <Fall> besteht aus einer Markenliste und einer Anweisungsfolge:

<Fall> <Markenliste> : <Anweisungsfolge>
<Fall> <leer>
und die Markenliste ist eine ggf. durch Kommas getrennte Liste von Konstanten oder Konstantenbereichen. Alle hier vorkommenden Konstanten, und auch der Ausdruck <E>, müssen aus demselben skalaren Typ sein. Der leere Fall ist nur dazu da, einen senkrechten Strich hinter der letzten Alternative zu erlauben.

Bei der Ausführung wird der Ausdruck <E> ausgewertet. Wird ein Fall gefunden, zu dem das Ergebnis paßt, so wird die zugehörige Anweisungsfolge ausgeführt, andernfalls der <Rest>. Fehlt der <Rest> und paßt kein Fall, so wird in Modula 2 ein Laufzeitfehler ausgelöst.

Beispiel

	TYPE Farbe = (rot, gelb, gruen):
	VAR ampel: Farbe;

	CASE ampel OF
	  rot: Halten |
	 gelb: KreuzungFrei |
	ELSE   Fahren
	END;

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36