Bisher haben wir Variablen verwendet, um einzelne Werte zu speichern, die während der Programmausführung gelesen und geändert werden können. In vielen Situationen ist es aber nötig, mehrere Werte zu speichern, deren Anzahl variabel ist – zum Beispiele eine Menge von Vokabeln, die in einem Quiz in zufälliger Reihenfolge abgefragt werden sollen.
In dieser Lektion werden wir uns mit einer einfachen Datenstruktur beschäftigen, die es ermöglicht, mehrere Werte in einem Objekt zu speichern: die sogenannte “Liste”. Listenobjekte werden in Scratch ähnlich wie Variablen verwendet, mit dem Unterschied, dass in einer Liste beliebig viele Werte gleichzeitig gespeichert werden können, in einer Variablen zu jedem Zeitpunkt nur einer.
Eine Liste ist in der Programmierung eine lineare Datenstruktur zur Speicherung von mehreren Werten. Jedes Element der Liste ist durch eine Nummer identifiziert, die seine Position in der Liste beschreibt. In Scratch werden die Positionen der Elemente von 1 an aufsteigend durchnummeriert. Die Länge einer Liste ist die Anzahl der in ihr gespeicherten Elemente. Bei einer Liste der Länge 6 enthält das Element mit der Nummer 1 den ersten Wert in der Liste und das Element mit der Nummer 6 den letzten Wert.
Die Besonderheit einer Liste ist, dass während der Programmausführung Elemente zur Liste hinzugefügt und vorhandene Elemente aus der Liste gelöscht werden können – sie hat also keine statische, feste Länge, sondern eine dynamische Länge. Um Elemente hinzuzufügen (am Ende oder an einer beliebigen Position innerhalb der Liste) oder zu löschen gibt es bestimmte Anweisungen:
Eine neue Liste muss zunächst definiert werden. Dazu wird in Scratch die Schaltfläche “Neue Liste” in der Block-Kategorie “Variablen” ausgewählt und ein eindeutiger Bezeichner für die neue Liste vergeben – am besten ein aussagekräftiger Name, der angibt, was die Liste im Programm bedeutet (zum Beispiel “Punkte” für die aktuellen Punktestände aller Teilnehmenden in einem Spiel). Anschließend erscheint ein neuer Werteblock mit dem Namen der neuen Liste in der Block-Bibliothek.
Durch Ankreuzen des Kästchens links neben dem Werteblock können die Werte, die momentan in der Liste gespeichert sind, live auf der Bühne angezeigt werden (wie wir es beispielweise auch von Variablen-Werteblöcken kennen). Hier lassen sich auch manuelle Einträge der Liste ändern, löschen und hinzufügen. Per Rechtsklick auf die Anzeige lassen sich auch Einträge aus einer Textdatei importieren.
Auf eine Liste kann nun in Anweisungen und Ausdrücken über den entsprechenden Listenblock zugegriffen werden.
Die oben beschriebenen Anweisungen zum Arbeiten mit Listen sind in Scratch durch die folgenden Anweisungsblöcke durchführbar:
Hängt ein neues Element mit dem angegebenen Wert an die ausgewählte Liste an (Auswahl der Liste über das Symbol ▾). Hier wird bespielsweise ein neues Element mit dem Text “Ding” als Wert an die Liste namens “meine Liste” angehängt. | |
Löscht das Element an der angegebenen Position aus der Liste. Hier wird das erste Element aus der Liste gelöscht, und alle anderen Elemente rücken um eine Position vor. | |
Löscht alle Elemente aus der ausgewählten Liste. | |
Fügt ein neues Element mit dem angegebenen Wert an der angegebenen Position in die Liste ein. Hier wird ein neues Element mit dem Text “Ding” als Wert ganz vorne eingefügt, und alle anderen Element rücken um eine Position nach hinten. | |
Überschreibt den Wert an der angegebenen Position durch den angegebenen Wert. Hier wird der Wert des ersten Elements in der Liste durch den Text “Ding” ersetzt. |
Daneben gibt es eine Reihe von Werteblöcken, mit denen die Werte der Listenelemente oder andere Eigenschaften der Liste (z. B. ihre Länge) abgefragt werden können:
Gibt den Wert des Elements an der angegebenen Position in der ausgewählten Liste an. | |
Gibt als Wert die Position des angegebenen Wertes in der ausgewählten Liste an. Wenn der angegebene Wert mehrmals in der Liste vorkommt, wird die Position des ersten Vorkommens ermittelt. | |
Gibt als Wert die Länge der ausgewählten Liste an (d. h. die Anzahl ihrer Elemente). | |
Gibt als Wahrheitswert an, ob die ausgewählte Liste den angegebenen Wert (mindestens einmal) enthält. |
Genau wie Variablen können Listen als globale oder private Listen definiert werden.
Beim Erzeugen eines neuen Listenobjekts über die Schaltfläche “Neue Liste” erscheint ein Dialog, in dem ausgewählt werden kann, ob eine globale Liste (“Für alle Figuren”) oder eine private Liste für die aktuell ausgewählte Figur (“Nur für diese Figur”) erzeugt werden soll:
Um zu entscheiden, ob eine Liste global oder privat definiert werden soll, gelten dieselben Regeln wie für Variablen (Stichwort “Datenkapselung”): Ist die Information innerhalb der Liste nur für ein bestimmtes Objetk relevant, so dass der Zugriff auf dieses Objekt beschränkt werden kann? Oder soll sie von mehreren Objekten gemeinsam oder unabhängig von Objekten genutzt werden?
Vorbereitung für vertiefende Aufgaben
Das unterscheidet private Listen von Objektvariablen: Der Wert einer Objektvariablen kann in Skripten anderer Objekte abgefragt werden, aber nicht geändert werden. Private Listen sind für andere Objekte dagegen vollständig unzugänglich. ↩︎