Riepilogo - Lista personalizzata
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 34 di 65.
Sfida
MedioScrivi CustomList in custom_list.gd, una classe che avvolge un Array privato _items e offre ciò che serve a una lista tramite metodi e metodi virtuali:
_init(items = [])memorizza una copia diitems, così le modifiche successive all'Array passato non si riflettono sulla lista.append(item)aggiunge un elemento alla fine.pop_back()rimuove e restituisce l'ultimo elemento, oppure restituiscenullquando la lista è vuota.get_at(index)restituisce l'elemento, oppurenullquando l'indice è fuori dall'intervallo da0asize() - 1.set_at(index, value)sostituisce l'elemento e restituiscetrue, oppure restituiscefalsese l'indice è fuori dalla lista.size(),has(item)eclear()funzionano come i metodi di Array con gli stessi nomi.concat(other)sostituisce l'operatore+: restituisce una nuovaCustomListcon gli elementi di questa lista seguiti dagli elementi diother, senza modificare nessuna delle due liste._to_string()restituisce gli elementi nel modo in cui li stampa un Array, ad esempio[3, 1, 4]._iter_init(),_iter_next()e_iter_get()consentono a un ciclofordi scorrere gli elementi.
Il codice fornito legge i numeri iniziali (una riga, separati da spazi, eventualmente vuota), crea la lista, aggiunge 99 all'Array che gli è stato passato e stampa la lista. Poi legge il numero di comandi e ne esegue uno per riga: append N, pop, get I, set I N, has N, size, sum (un ciclo for sulla lista), clear e concat N N .... Con questo input:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2stampa:
[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]Il tuo codice va inserito in custom_list.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# La lista deve conservare una propria copia
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
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online