Ringkasan: List Kustom
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 34 dari 65.
Tantangan
SedangTulis CustomList di custom_list.gd, sebuah class yang membungkus Array privat _items dan menyediakan hal-hal yang dibutuhkan sebuah list melalui method dan method virtual:
_init(items = [])menyimpan salinanitems, sehingga perubahan berikutnya pada Array yang diteruskan tidak memengaruhi list.append(item)menambahkan item di bagian akhir.pop_back()menghapus dan mengembalikan item terakhir, atau mengembalikannullsaat list kosong.get_at(index)mengembalikan item, ataunullsaat index berada di luar rentang0hinggasize() - 1.set_at(index, value)mengganti item dan mengembalikantrue, atau mengembalikanfalsejika index berada di luar list.size(),has(item), danclear()bekerja seperti method Array dengan nama yang sama.concat(other)menggantikan operator+: fungsi ini mengembalikanCustomListbaru yang berisi item dari list ini, diikuti item dariother, dan tidak mengubah kedua list._to_string()mengembalikan item seperti cara Array mencetaknya, misalnya[3, 1, 4]._iter_init(),_iter_next(), dan_iter_get()memungkinkan perulanganformenelusuri item.
Kode yang disediakan membaca angka awal (satu baris, dipisahkan spasi, boleh kosong), membuat list, menambahkan 99 ke Array yang diteruskan, lalu mencetak list. Setelah itu, kode membaca jumlah perintah dan menjalankan satu perintah pada setiap baris: append N, pop, get I, set I N, has N, size, sum (perulangan for untuk menelusuri list), clear, dan concat N N .... Untuk input ini:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2hasilnya:
[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]Tulis kodemu di custom_list.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan tetap seperti semula
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# list harus menyimpan salinannya sendiri
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
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online