Benutzer:NAN/Arbeit mit Vorlage (Teil1): if vs. switch

Aus Perrypedia
Zur Navigation springen Zur Suche springen

Eine der grundlegensten Möglichkeiten einer Programmiersprache ist es, Fallunterscheidungen zu machen.

Ein einfaches Beispiel wäre ein Programm, dass einen Nutzer (nennen wir ihn mal NAN ;-) ), bei der Anmeldung begrüßt. Am Geburtstag von NAN "Alles Gute zum Geburtstag, NAN!". An allen anderen Tagen "Hallo, NAN!".

In Pseudocode würde das wie folgt ausschauen:

Wenn Datum = Geburtstag
dann "Alles Gute zum Geburtstag, NAN!"
sonst "Hallo, NAN!"

Die Vorlagen-Sprache der mediawiki ist nun nicht wirklich eine ausgefeilte Programmiersprache, dieses grundlegende Konstrukt abzubilden ist aber durchaus möglich (im folgenden die Abfrage auf das Datum weiter in Pseudecode, um nicht vom Kernkonzept abzulenken;-) ):

{{#if: Datum=Geburtstag | Alles Gute zum Geburtstag, NAN! | Hallo, NAN!}}

Oft genügt eine so einfache Abfrage, oft ist es aber auch notwendig, mehrere Werte abzufragen.
Nehmen wir zum Beispiel an, an Weihnachten soll zusätzlich der Gruß "Frohes Fest, NAN!" sein.

In Pseudocode würde das wie folgt ausschauen:

Wenn Datum = Geburtstag
dann "Alles Gute zum Geburtstag, NAN!"
sonst Wenn Datum = Weihnachten
        dann "Frohes Fest, NAN!"
        sonst "Hallo, NAN!"

Im Sonst-Teil wird eine weitere Fallunterscheidung ausgeführt, die Fallunterscheidungen sind ineinander verschachtelt. In den meisten Programmiersprachen keine große Sache. In der Vorlagen-Sprache (wieder mit Pseudocode für Datumsprüfung) würde das nun aber wie folgt ausschauen:

{{#if: Datum=Geburtstag | Alles Gute zum Geburtstag, NAN! | {{#if: Datum=Weihnachten | Frohes Fest, NAN! | Hallo, NAN!}} }}

Theoretisch kann man solche Verschachtelungen beliebig fortsetzen. Praktisch kommt einerseits die mediawiki nicht so wirklich gut mit solchen Verschachtelungen zurecht und hat deshalb Grenzen für die Anzahl gesetzt.
Fast noch wichtiger: Menschen kommen mit der Vorlagen-Schreibweise nicht so wirklich zurecht. ;-)
In einem realistischen Beispiel kämen im Inneren der ifs noch einige weiter { und } und #expr: und ... vor. Selbst wenn man mit Zeilenumbrüchen und Einrückungen arbeitet kommt man schnell an eine Grenze, ab der man mehr über Versuch und Irrtum die Vorlage zum laufen bringt, als tatsächlich per Wissen.

Zumindest teilweise Abhilfe bringt hier das Switch-Konstrukt.

In Pseudocode würde das so aussehen:

Betrachte Datum
Wenn Geburtstag: "Alles Gute zum Geburtstag, NAN!"
Wenn Weihnachten: "Frohes Fest, NAN!"
In allen anderen Fällen: "Hallo, NAN!"

Die Verschachtelung fällt weg, es wird wesentlich übersichtlicher.
Nun, natürlich ist "wesentlich übersichtlicher" bei der Vorlagen-Sprache der mediawiki ein Thema für sich. ;-)
Leider hat man sich entschlossen, für das, was ich oben mit ":" zum Ausdruck gebracht habe, das "="-Zeichen zu verwenden, was etwas verwirrend ist:

{{#switch: Datum
| Geburtstag=Alles Gute zum Geburtstag, NAN!
| Weihnachten=Frohes Fest, NAN!
| Hallo, NAN!}}

Dennoch: die Mediwiki-Grenze bezüglich Verschachtelung spielt so keine Rolle und hat man sich erstmal an das "=" gewöhnt, ist das wesentlich übersichtlicher, als das Arbeiten mit verschachtelten if.

Ausführliche Infos finden sich in der Doku zur Mediawikik unter http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions