Zum Inhalt springen

Hilfe:Vorlagenprogrammierung/Parserfunktionen/Bedingungen

Aus Wikonia

Bedingungen in Parserfunktionen dienen dazu, die Ausgabe von Wikitext abhängig von Werten zu steuern. Sie ermöglichen einfache logische Entscheidungen direkt im Text, etwa ob ein bestimmter Inhalt angezeigt wird oder nicht.

Dabei handelt es sich um eine Form von Programmierlogik, allerdings in stark eingeschränkter Ausprägung. Parserfunktionen kennen weder Variablen noch Schleifen oder echten Kontrollfluss. Jede Auswertung hat genau ein Ziel: zu entscheiden, welcher Inhalt ausgegeben wird.

Sie sind damit kein allgemeines Programmierwerkzeug, sondern ein Hilfsmittel zur Strukturierung von Vorlagen und zur kontrollierten Textausgabe. Für einfache Bedingungen sind sie gut geeignet. Für komplexere Logiken sind sie es nicht – und sollen es auch nicht sein.

Sobald Logiken komplex werden, mehrfach verschachtelt sind oder strukturiert wiederverwendet werden sollen, stoßen Parserfunktionen konzeptionell an ihre Grenzen. Dafür existieren andere Mechanismen → Siehe: Lua.

Grundlagen bedingter Auswertung[Bearbeiten | Quelltext bearbeiten]

Die Funktionsweise aller Bedingungsfunktionen beruht auf einer einfachen Unterscheidung: Ein Ausdruck ist entweder leer oder nicht leer.

„Leer“ bedeutet dabei nicht, dass im Quelltext nichts steht. Entscheidend ist allein das Ergebnis nach der Auswertung. Ein Vorlagenparameter kann vorhanden sein und dennoch leer ausgewertet werden. Ebenso können Vorlagen, Parserfunktionen oder andere Konstrukte zwar eingebunden sein, aber keinen sichtbaren Inhalt liefern.

Ein Ausdruck gilt als „wahr“, wenn nach der Auswertung mindestens ein wirksames Zeichen übrig bleibt. Er gilt als „falsch“, wenn das Ergebnis leer ist. Reine Leerzeichen, Zeilenumbrüche oder HTML-Kommentare zählen dabei nicht als Inhalt.

Parserfunktionen werden außerdem stets von innen nach außen ausgewertet. Zuerst wird der innerste Ausdruck aufgelöst, dessen Rückgabewert dann in die äußere Bedingung eingeht. Diese Auswertungsreihenfolge ist entscheidend für das Verständnis späterer Verschachtelungen und erklärt, warum logische Verknüpfungen wie UND oder ODER im Wikitext nur indirekt entstehen.

#if – Bedingte Ausgabe[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion wertet die Bedingung aus und gibt abhängig vom Ergebnis entweder den Text aus Wenn wahr oder den Text aus Wenn falsch zurück. Der dritte Parameter ist optional.

Funktion Parameter Optionale Parameter
#if Bedingung Wenn wahr Wenn falsch

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Die Bedingung gilt als wahr, wenn sie nach der vollständigen Auswertung nicht leer ist. Sie gilt als falsch, wenn das Ergebnis leer ist.

Entscheidend ist dabei nicht der Quelltext, sondern ausschließlich das Ergebnis der Auswertung. Ein vorhandener Parameter, eine eingebundene Vorlage oder eine Parserfunktion können im Quelltext sichtbar sein und dennoch leer ausgewertet werden.

Ist der Parameter Wenn falsch nicht angegeben, wird im falschen Fall kein Text ausgegeben. Dies ist das normale Verhalten von #if.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#if: {{{1|}}} | Wahr }}

Gibt „Wahr“ aus, wenn der erste Vorlagenparameter nicht leer ist.

Ist er leer, wird nichts ausgegeben.

{{#if: {{{1|}}} | Wahr | Falsch }}

Gibt „Wahr“ aus, wenn der Parameter nicht leer ist, sonst „Falsch“.

{{#if: {{{1|}}} | | Falsch }}

Gibt „Falsch“ aus, wenn der Parameter leer ist. Ist er nicht leer, wird nichts ausgegeben.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

Ein häufiger Fehler ist die Verwendung von Parametern ohne Defaultwert. Ein Ausdruck wie {{{1}}} kann als „nicht leer“ gelten, obwohl kein Wert übergeben wurde.

Um dieses Verhalten zu vermeiden, sollte immer ein leerer Default gesetzt werden:

{{{1|}}}

Leerzeichen, Zeilenumbrüche und HTML-Kommentare zählen nicht als Inhalt. Eine Bedingung, die ausschließlich daraus besteht, gilt als leer und damit als falsch.

#if kennt keine logischen Operatoren wie UND oder ODER. Solche Verknüpfungen entstehen ausschließlich durch Verschachtelung und werden später gesondert behandelt.

#ifeq – Vergleich zweier Werte[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion vergleicht zwei Werte miteinander und gibt abhängig vom Ergebnis entweder den Text aus Wenn gleich oder den Text aus Wenn ungleich zurück. Der dritte Parameter ist optional.

Funktion Parameter Optionale Parameter
#ifeq Wert 1 Wert 2 Wenn ungleich

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Die beiden Werte werden nach vollständiger Auswertung zeichenweise miteinander verglichen.

Sind beide Werte identisch, gilt die Bedingung als wahr. Unterscheiden sie sich, gilt sie als falsch.

Wie bei #if ist nicht der Quelltext entscheidend, sondern das Ergebnis der Auswertung. Leerzeichen, Zeilenumbrüche oder durch Vorlagen erzeugte Inhalte beeinflussen den Vergleich direkt.

Ist der Parameter Wenn ungleich nicht angegeben, wird im ungleichen Fall kein Text ausgegeben.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#ifeq: {{{1|}}} | ja | Treffer }}

Gibt „Treffer“ aus, wenn der Parameter exakt ja enthält.

{{#ifeq: {{{1|}}} | ja | Treffer | Kein Treffer }}

Gibt „Treffer“ aus, wenn der Wert gleich ist, sonst „Kein Treffer“.

{{#ifeq: {{{1|}}} | | Leer }}

Gibt „Leer“ aus, wenn der Parameter leer ist.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

Der Vergleich erfolgt ohne automatische Normalisierung. Unterschiedliche Groß-/Kleinschreibung oder zusätzliche Leerzeichen führen dazu, dass Werte als ungleich gelten.

Tipp:Normalisierungen können mittels Textmanipulation realisiert werden.

Ein leerer Wert unterscheidet sich von einem nicht gesetzten Parameter. Um unerwartete Ergebnisse zu vermeiden, sollte auch hier ein leerer Default gesetzt werden: {{{1|}}}

#ifeq eignet sich für einfache, explizite Vergleiche. Für komplexere Logiken oder mehrere Vergleichswerte ist #switch oft besser geeignet.

#ifexpr – Auswertung von Ausdrücken[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion wertet einen mathematischen Ausdruck aus und gibt abhängig vom Ergebnis entweder den Text aus Wenn wahr oder den Text aus Wenn falsch zurück. Der dritte Parameter ist optional.

Funktion Parameter Optionale Parameter
#ifexpr Ausdruck Wenn wahr Wenn falsch

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

#ifexpr wertet den angegebenen Ausdruck aus. Das Ergebnis wird als wahr oder falsch interpretiert:

Ein Ausdruck gilt als wahr, wenn er nach der Auswertung einen von 0 verschiedenen Wert ergibt. Er gilt als falsch, wenn das Ergebnis 0 ist.

Vergleiche (z. B. >, =) liefern ebenfalls ein Wahr/Falsch-Ergebnis und können direkt verwendet werden.

Ist der Parameter Wenn falsch nicht angegeben, wird im falschen Fall kein Text ausgegeben.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#ifexpr: 5 > 3 | Wahr | Falsch }}

Gibt „Wahr“ aus, weil 5 > 3 zutrifft.

{{#ifexpr: {{{1|0}}} = 0 | Leer | Belegt }}

Gibt „Leer“ aus, wenn der Parameter numerisch 0 ist (oder nicht gesetzt wurde, da Default 0).

{{#ifexpr: ({{{1|0}}} + {{{2|0}}}) >= 10 | OK | Zu klein }}

Addiert zwei Werte und prüft, ob die Summe mindestens 10 ist.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

#ifexpr ist numerisch. Texte wie ja oder Wahr sind keine gültigen Zahlen und führen zu unerwarteten Ergebnissen.

Ein leerer oder nicht gesetzter Parameter sollte immer einen sinnvollen Default erhalten (z. B. 0), damit der Ausdruck zuverlässig auswertbar bleibt:

{{{1|0}}}

Vergleiche müssen als Operatoren im Ausdruck formuliert werden (z. B. >, <, =). Für reine „leer/nicht leer“-Prüfungen ist #if in der Regel besser geeignet. #ifexpr basiert auf der Auswertung mathematischer Ausdrücke. Die zugrunde liegende Ausdruckssyntax wird von der Parserfunktion #expr bereitgestellt.

Für eine vollständige Übersicht über unterstützte Operatoren, Funktionen und Rechenregeln → siehe: Mathematische Ausdrücke (#expr).

#switch – Mehrfachverzweigung[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion vergleicht einen Wert mit mehreren möglichen Fällen und gibt den zugehörigen Text zurück. Wird kein passender Fall gefunden, kann ein Standardwert ausgegeben werden.

Funktion Parameter Optionale Parameter
#switch Vergleichswert Fall → Ausgabe Standardfall

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

#switch wertet zunächst den angegebenen Vergleichswert aus. Anschließend werden die definierten Fälle der Reihe nach geprüft.

Sobald ein Fall exakt mit dem Vergleichswert übereinstimmt, wird der zugehörige Text ausgegeben und die Auswertung beendet. Wird kein passender Fall gefunden, wird der als Standard definierte Text ausgegeben.

Ein Standardfall kann explizit mit #default angegeben werden. Fehlt ein Standardfall vollständig, wird kein Text ausgegeben.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#switch: {{{1|}}} | ja = Zustimmung | nein = Ablehnung }}

Gibt abhängig vom Parameter entweder „Zustimmung“ oder „Ablehnung“ aus. Ist der Parameter leer oder unbekannt, wird nichts ausgegeben.

{{#switch: {{{1|}}} | 1 = Eins | 2 = Zwei | #default = Unbekannt }}

Gibt den passenden Text für die Werte 1 oder 2 aus, sonst „Unbekannt“.

{{#switch: {{{1|}}} | = Leer | a = A | b = B }}

Behandelt explizit auch den leeren Wert als eigenen Fall.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

Der Vergleich erfolgt zeichenweise und ohne Normalisierung. Unterschiedliche Groß-/Kleinschreibung oder zusätzliche Leerzeichen führen dazu, dass kein Fall zutrifft.

Die Reihenfolge der Fälle ist relevant: Der erste passende Fall wird verwendet, alle folgenden werden ignoriert.

#switch eignet sich für übersichtliche Mehrfachverzweigungen. Bei sehr vielen Fällen oder komplexer Logik wird die Struktur schnell unübersichtlich.

#iferror – Fehlerbehandlung[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion prüft, ob die Auswertung eines Ausdrucks einen Fehler erzeugt, und gibt abhängig davon unterschiedlichen Text aus. Der dritte Parameter ist optional.

Funktion Parameter Optionale Parameter
#iferror Ausdruck Wenn Fehler Wenn kein Fehler

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

#iferror wertet den angegebenen Ausdruck aus und prüft, ob dabei ein Parserfehler entsteht.

Tritt ein Fehler auf, wird der Text aus Wenn Fehler ausgegeben. Tritt kein Fehler auf, wird der Text aus Wenn kein Fehler ausgegeben.

Ist der Parameter Wenn kein Fehler nicht angegeben, wird im fehlerfreien Fall standardmäßig das Ergebnis des Ausdrucks ausgegeben.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#iferror: {{#expr: 1 / 0 }} | Fehler }}

Gibt „Fehler“ aus, da die Division durch 0 einen Fehler erzeugt.

{{#iferror: {{#expr: 10 / 2 }} | Fehler | OK }}

Gibt „OK“ aus, da der Ausdruck fehlerfrei ausgewertet wird.

{{#iferror: {{#expr: 10 / 2 }} | Fehler }}

Gibt das Ergebnis 5 aus, da kein Fehler auftritt und kein Alternativtext definiert wurde.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

#iferror erkennt nur echte Parserfehler. Ein leerer oder unerwarteter Wert gilt nicht automatisch als Fehler.

Die Funktion eignet sich besonders zur Absicherung von Ausdrücken oder Parserfunktionen, die unter bestimmten Umständen fehlschlagen können.

Für logische Prüfungen wie „leer oder nicht leer“ ist #iferror nicht geeignet.

#ifexist – Existenzprüfung von Seiten[Bearbeiten | Quelltext bearbeiten]

Die Parserfunktion prüft, ob eine bestimmte Seite existiert, und gibt abhängig vom Ergebnis entweder den Text aus Wenn vorhanden oder den Text aus Wenn nicht vorhanden zurück. Der dritte Parameter ist optional.

Funktion Parameter Optionale Parameter
#ifexist Seitenname Wenn vorhanden Wenn nicht vorhanden

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

#ifexist prüft, ob die angegebene Seite im Wiki existiert. Dabei wird ausschließlich der Seitenname ausgewertet, nicht der Inhalt der Seite.

Existiert die Seite, gilt die Bedingung als wahr. Existiert sie nicht, gilt sie als falsch.

Ist der Parameter Wenn nicht vorhanden nicht angegeben, wird im negativen Fall kein Text ausgegeben.


Beispiele[Bearbeiten | Quelltext bearbeiten]

{{#ifexist: Hilfe:Parserfunktionen | Vorhanden }}

Gibt „Vorhanden“ aus, wenn die Seite Hilfe:Parserfunktionen existiert.

{{#ifexist: Hilfe:Parserfunktionen | Vorhanden | Nicht vorhanden }}

Gibt abhängig von der Existenz der Seite den entsprechenden Text aus.

{{#ifexist: {{{1|}}} | Seite existiert | Seite fehlt }}

Prüft die Existenz einer Seite, deren Name über einen Parameter übergeben wird.

Typische Fehler und Besonderheiten[Bearbeiten | Quelltext bearbeiten]

#ifexist ist cache-abhängig und kann bei häufiger oder massenhafter Nutzung die Performance beeinträchtigen.

Info:Die Funktion gilt als teuer und ist auf maximal 500 Einbindungen innerhalb einer Seite beschränkt, wobei auch Einbindungen durch Expansion anderer Vorlagen mitzählen.

Die Funktion prüft nur, ob eine Seite existiert – nicht, ob sie leer, sinnvoll oder zugänglich ist.

Grenzen von Parserfunktionen[Bearbeiten | Quelltext bearbeiten]

Parserfunktionen sind für einfache, lokale Entscheidungen im Wikitext gedacht. Sie eignen sich nicht für umfangreiche oder komplexe Logiken.

Spätestens wenn Bedingungen stark verschachtelt werden, die Lesbarkeit leidet oder Logik mehrfach wiederverwendet werden soll, sind Parserfunktionen nicht mehr das geeignete Mittel.

Für komplexere Prüfungen oder wiederholte Existenzabfragen sollte auf andere Konzepte oder auf Module mit Lua-Programmierung zurückgegriffen werden. Sie ermöglichen strukturierte Logik, Variablen, Wiederverwendbarkeit und eine klare Trennung zwischen Verarbeitung und Darstellung.

Siehe auch