Rückblick – Benutzerdefinierte Liste
Teil des Abschnitts Objektorientierte Programmierung der GDScript-Journey von Coddy. Lektion 34 von 65.
Aufgabe
MittelSchreibe CustomList in custom_list.gd: eine Klasse, die ein privates Array _items umschließt und über Methoden und virtuelle Methoden die Funktionen einer Liste bereitstellt:
_init(items = [])speichert eine Kopie vonitems, sodass spätere Änderungen am übergebenen Array die Liste nicht beeinflussen.append(item)fügt am Ende ein Element hinzu.pop_back()entfernt das letzte Element und gibt es zurück oder gibtnullzurück, wenn die Liste leer ist.get_at(index)gibt das Element zurück odernull, wenn der Index außerhalb von0bissize() - 1liegt.set_at(index, value)ersetzt das Element und gibttruezurück oder gibtfalsezurück, wenn der Index außerhalb der Liste liegt.size(),has(item)undclear()funktionieren wie die gleichnamigen Array-Methoden.concat(other)übernimmt die Funktion des Operators+: Die Methode gibt eine neueCustomListzurück, deren Elemente zuerst die dieser Liste und danach die Elemente vonothersind, ohne eine der beiden Listen zu verändern._to_string()gibt die Elemente so zurück, wie ein Array sie ausgibt, zum Beispiel[3, 1, 4]._iter_init(),_iter_next()und_iter_get()ermöglichen einerfor-Schleife, die Elemente zu durchlaufen.
Der bereitgestellte Code liest die Anfangszahlen ein (eine Zeile, durch Leerzeichen getrennt, möglicherweise leer), erstellt die Liste, fügt 99 zum übergebenen Array hinzu und gibt die Liste aus. Anschließend liest er die Anzahl der Befehle ein und führt einen pro Zeile aus: append N, pop, get I, set I N, has N, size, sum (eine for-Schleife über die Liste), clear und concat N N .... Für diese Eingabe:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2gibt der Code Folgendes aus:
[3, 1, 4]
[3, 1, 4, 1]
Item 2: 4
No item at 9
[5, 1, 4, 1]
Has 4: true
Sum: 11
Popped 1
[5, 1, 4] + [9, 2] = [5, 1, 4, 9, 2]Dein Code gehört in custom_list.gd. main.gd enthält den bereitgestellten Ein-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
extends Node
func _ready():
# Vorgegebener Eingabe-/Ausgabecode: unverändert lassen
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# Die Liste muss eine eigene Kopie behalten
numbers.append(99)
print(list)
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ", false)
match parts[0]:
"append":
list.append(int(parts[1]))
print(list)
"pop":
var item = list.pop_back()
print("Empty" if item == null else "Popped %d" % item)
"get":
var item = list.get_at(int(parts[1]))
print(("No item at " + parts[1]) if item == null else "Item %s: %d" % [parts[1], item])
"set":
if list.set_at(int(parts[1]), int(parts[2])):
print(list)
else:
print("No item at " + parts[1])
"has":
print("Has %s: %s" % [parts[1], list.has(int(parts[1]))])
"size":
print("Size: %d" % list.size())
"sum":
var total := 0
for item in list:
total += item
print("Sum: %d" % total)
"clear":
list.clear()
print(list)
"concat":
var other := CustomList.new(to_numbers(parts.slice(1)))
print("%s + %s = %s" % [list, other, list.concat(other)])
func to_numbers(words: PackedStringArray) -> Array:
var result := []
for word in words:
result.append(int(word))
return result
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort selfMethodenEigenschaftenKonstruktor (_init)Wiederholung – Einfacher Taschenrechner4Polymorphie
Methodenüberschreibung erneut betrachtetDuck-TypisierungAbstrakte Klassen und MethodenSchnittstellendesignRückblick – Formrechner2Klassenattribute
Instanz- vs. statische VariablenStatische FunktionenProperty-SetterProperty-GetterPrivat nach KonventionWiederholung – Bankkontenverwaltung5Kapselung
Öffentliche und private MemberValidierung mit SetternInformationsverbergenSchreibgeschützte EigenschaftenRückblick – System zur Schülerverwaltung8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungInnere KlassenNodes als KomponentenRefCounted vs. NodeEnums in Klassen11Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungVererbungskettenTypprüfungen mit isWiederholung – Mitarbeiterhierarchie6Spezielle Methoden
Einführung in virtuelle MethodenDie _to_string-MethodeBenutzerdefinierte IteratorenRückblick – Benutzerdefinierte Liste9Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBeobachter-MusterStrategie-Muster12Abschließende Herausforderungen
E-Learning-PlattformBankensystemEntwicklung von SpielfigurenFahrzeugvermietungÜbe selbstständig: Online-GDScript-Compiler