Podsumowanie — własna lista
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 34 z 65.
Wyzwanie
ŚredniNapisz klasę CustomList w pliku custom_list.gd, która opakowuje prywatną tablicę Array _items i udostępnia metody oraz metody wirtualne potrzebne liście:
_init(items = [])przechowuje kopięitems, dzięki czemu późniejsze zmiany w przekazanej tablicy Array nie wpływają na listę.append(item)dodaje element na końcu.pop_back()usuwa i zwraca ostatni element albo zwracanull, gdy lista jest pusta.get_at(index)zwraca element albonull, gdy indeks jest poza zakresem od0dosize() - 1.set_at(index, value)zastępuje element i zwracatruealbo zwracafalse, gdy indeks jest poza listą.size(),has(item)iclear()działają tak jak metody Array o tych samych nazwach.concat(other)zastępuje operator+: zwraca nowąCustomListz elementami tej listy, po których następują elementyother, i nie zmienia żadnej z list._to_string()zwraca elementy w taki sposób, w jaki wypisywana jest tablica Array, na przykład[3, 1, 4]._iter_init(),_iter_next()i_iter_get()umożliwiają pętliforprzechodzenie przez elementy.
Dostarczony kod odczytuje początkowe liczby (jeden wiersz, liczby oddzielone spacjami, wiersz może być pusty), tworzy listę, dodaje 99 do przekazanej tablicy Array i wypisuje listę. Następnie odczytuje liczbę poleceń i wykonuje po jednym w każdym wierszu: append N, pop, get I, set I N, has N, size, sum (pętla for przechodząca przez listę), clear i concat N N .... Dla tego wejścia:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2wypisuje:
[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]Umieść swój kod w pliku custom_list.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
extends Node
func _ready():
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# Lista musi przechowywać własną kopię
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
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online