Eigenschaften: geschweifte Blöcke, Zufallszahlen, Mehrzahl
Mit Listen allein kommt man weit, aber nicht überall hin. Diese Folge zeigt die Zusätze, die aus einer Aufzählung einen Text machen, der nicht nach Baukasten klingt.
Manchmal möchten man in Sätzen einfach zufällige zwischen einigen Elementen wählen und es ist nicht wünschenswert oder zu aufwendig dafür eine separate Liste zu erstellen. In diesem Fall können wir eine Kurzschreibweise mit „geschwungenen Klammern“ verwenden:
Siehst du wie einfach das nun funktioniert? Anstatt nun also Listen zu erzeugen und einzubinden, werden die möglichen Zufallselemente innerhalb von geschwungenen Klammern { und } definiert und mit einem senkrchten Strich (auch Pipe genannt) | getrennt.
So wie wir die Wahrscheinlichkeit normaler Listenelemente ändern können, können wir auch die Wahrscheinlichkeit von abgekürzten „geschwungenen“ Listenelementen ändern. Ausgehend vom geschwungenen Block: {groß|groß|massiv} können wir „groß“ dreimal so wahrscheinlich machen, indem wir schreiben:
Du hast es vielleicht schon erraten, aber wir können auch so etwas machen:
Hier haben wir nun quadratische Blöcke (also definierte Listen) in einen geschweiften Block gesetzt, sodass in der Hälfte der Outputs ein zufälliges Tier und in der anderen Hälfte eine zufällige Pflanze ausgewählt wird.
Wichtig: Beachte, dass Leerzeichen in geschweiften Blöcken berücksichtigt werden, sodass {hi|hallo} nicht dasselbe ist wie {hi | hallo}. In quadratischen Blöcken werden Leerzeichen ignoriert. Daher ist [Tier] dasselbe wie [ Tier ] – sie geben genau dasselbe aus, trotz der zusätzlichen Leerzeichen in den Klammern.
Geschweifte Blöcke
Geschweifte Blöcke werden in Perchance für alle möglichen und ausgefallenen Tricks verwendet. Nehmen wir zum Beispiel diesen Satz:
Wichtig: Das funktioniert nur in der englischen Benutzung von Perchance!
Wenn das Ergebnis von [animal] zufällig mit einem Vokal beginnt, stimmt die Grammatik nicht mehr: „I’m a antelope“ – es sollte „I’m an antelope“ heißen. Wir könnten uns manuell behelfen, indem wir zwei separate Listen von Tieren erstellen (eine, die „a“ benötigen, und eine, die „an“ benötigen), aber das wäre mühsam und auf Dauer nicht tragbar. Solche Lösungen sollten nie dein primäres Ziel sein!
Stattdessen können wir einfach Folgendes tun: Ich bin {a} [animal]. Durch die Verwendung des geschweiften Blocks {a} wird der richtige Artikel (a/an) basierend auf dem, was für das nächste Wort angemessen ist, ausgewählt. Sprich Perchance erkennt ob das Tier mit „a“, „e“, „i“, „o“ oder „u“ beginnt. Wie gesagt, das funktioniert nur wenn du das Ganze im Englischen verwendest. Bei deutschen Wörtern ist es ja nicht so einfach.
{s} ist ein weitere geschweifter, definierter Block innerhalb von Perchance. Sehen wir uns das anhand eines Beispiels an. Nehmen wir den folgenden Satz:
Das Problem wird bereits ersichtlich: „I have 2 bananas“ ergibt Sinn und ist korrekt, jedoch nicht „I have 1 bananas“ – auch wenn das so manche Touristen so behaupten. Wir benötigen also eine Möglichkeit, ein Wort zu pluralisieren. Also machen wir folgendes:
Nun wird das „s“ immer dann hinten angestellt, wenn der Wert nicht „1“ ist. Das kann man in bedingter Weise sogar bei deutschen Wörtern einsetzen.
Zufällige Zahlen und Buchstaben
Mit Perchance kannst du nicht nur definierte Listen ausgeben, sondern auch zufällige Zahelnwerte oder Buchstaben. Anstatt {1|2|3} zu schreiben, können wir ebenso {1-3} schreiben. Das bedeutet, dass Zahlen von 1 bis 3 als Zufallswert herangezogen werden.
Du kannst dies natürlich beliebig definieren: {1-500} erzeugt Zahlenwerte zwischen 1 und 500. Das funktioniert auch mit Kleinbuchstaben {a-z} oder {e-t} und Großbuchstaben {A-Z} oder {C-U}.
Plural und Co (für Englisch)
Das nächste Thema funktioniert ebenfalls nur, wenn du Perchance in der englischen Variante verwendet – also englisch programmierst. Wir haben ja ganz am Anfang gelernt, dass du mit eckigen Klammern wie [animal] ein zufälliges Element aus einer zuvor definierten „animal“-Liste anzeigen kannst. Doch diese eckigen Klammern bzw. Blöcke können noch etwas mehr.
Wichtig: Das funktioniert nur in der englischen Benutzung von Perchance!
In diesem Beispiel würde [sentence] etwa so ausgewertet:
Was offensichtlich nicht korrekt ist. Es sollte heißen: „There are so many cows here.“ Was können wir also tun um eine Lösung zu finden? Unsere „animal“-Liste so ändern, dass sie als Pluralformen enthalten sind? Aber dann würde der zweite Satz nicht mehr funktionieren – dieser benötigt ja die Elemente als Singularwörter.
Wichtig: Das funktioniert nur in der englischen Benutzung von Perchance!
Bei Perchance kannst du (in der englischen Benutzung) Elemente ganz einfach in die Pluralform umwandeln: [animal.pluralForm]. Setze einfach einen Punkt und dann „pluralForm“ nach dem Namen der Liste, wo du diese Umwandlung benötigst. Unsere neue Liste mit „sentence“ lautet also:
Mit dieser Ergänzung ist unser Pluralisierungsproblem (im Englischen) behoben – aber wir sind noch nicht ganz fertig. Das letzte Element in unserer Liste hat den Block bzw. das Listenelement „animal“ am Anfang des Satzes und sollte daher idealerweise groß geschrieben werden. So machen wir das:
Die Ergänzung „titleCase“ wandelt das kleingeschriebene Wort in ein großgeschriebenes Wort um. Beachte, dass wir mehrere „Eigenschaften“ aneinanderreihen können, indem wir sie mit einem Punkt verbinden. Hier sind noch ein paar weitere Eigenschaften zum Ausprobieren:
[Tier.PluralForm.TitelGroßschreibung]. Beachte, dass wir mehrere „Eigenschaften“ aneinanderreihen können, indem wir sie mit einem Punkt verbinden. Hier sind noch ein paar weitere Eigenschaften zum Ausprobieren (nur in Englisch):
- singularForm (SingularForm)
- pastTense (Präteritum)
- presentTense (Gegenwart)
- futureTense (Zukunft)
- upperCase (Großschreibung)
- lowerCase (Kleinschreibung)
- sentenceCase (SatzGroßschreibung)
- titleCase (TitelGroßschreibung)
Es gibt noch mehr Eigenschaften, aber diese einfachen sollten für einfache Generatoren ausreichen. Wir werden im weiteren Verlauf dieses Tutorials mehr über leistungsfähigere und interessantere Eigenschaften erfahren. Beachte auch, dass die Eigenschaften singularForm, pluralForm, pastTense, presentTense und futureTense möglicherweise nicht für alle Wörter (insbesondere seltene und ausschließlich englische) richtig funktionieren.
In Fällen, in denen 100 % Genauigkeit erforderlich ist, ist es am besten, separate Listen für die Varianten Plural/Past-Tense usw. zu erstellen.
RK