Tekrar - Özel Liste
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 65.
Görev
Ortacustom_list.gd dosyasında, özel bir Array _items sarmalayan ve metotlar ile sanal metotlar aracılığıyla bir listenin ihtiyaç duyduğu işlevleri sunan CustomList sınıfını yaz:
_init(items = []),itemsöğesinin bir kopyasını saklar; böylece kendisine aktarılan Array'de daha sonra yapılan değişiklikler listeye yansımaz.append(item)sona bir öğe ekler.pop_back()son öğeyi kaldırıp döndürür veya liste boş olduğundanulldöndürür.get_at(index)öğeyi döndürür veya dizin0ilesize() - 1aralığının dışındaysanulldöndürür.set_at(index, value)öğeyi değiştiriptruedöndürür veya dizin listenin dışındaysafalsedöndürür.size(),has(item)veclear(), aynı ada sahip Array metotları gibi çalışır.concat(other),+operatörünün yerine geçer: bu listenin öğelerini, ardındanotheröğelerini içeren yeni birCustomListdöndürür ve hiçbir listeyi değiştirmez._to_string(), öğeleri Array'in yazdırdığı biçimde döndürür; örneğin[3, 1, 4]._iter_init(),_iter_next()ve_iter_get(), birfordöngüsünün öğeler arasında gezinmesini sağlar.
Verilen kod başlangıç sayılarını (tek satırda, boşluklarla ayrılmış ve boş olabilir) okur, listeyi oluşturur, kendisine aktarılan Array'e 99 ekler ve listeyi yazdırır. Ardından komut sayısını okur ve her satırda bir komut çalıştırır: append N, pop, get I, set I N, has N, size, sum (liste üzerinde bir for döngüsü), clear ve concat N N .... Bu girdi için:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2şunu yazdırır:
[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]Kodunu custom_list.gd dosyasına yaz. main.gd, verilen girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# Liste kendi kopyasını saklamalıdır
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
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi