Ôn tập: danh sách tùy chỉnh
Thuộc phần Lập trình hướng đối tượng trong hành trình GDScript của Coddy. Bài học 34 trên 65.
Thử thách
Trung bìnhViết CustomList trong custom_list.gd, một lớp bọc quanh mảng riêng tư _items và cung cấp những gì một danh sách cần thông qua các phương thức và phương thức ảo:
_init(items = [])lưu một bản sao củaitems, vì vậy những thay đổi sau này đối với mảng được truyền vào sẽ không ảnh hưởng đến danh sách.append(item)thêm một phần tử vào cuối.pop_back()xóa và trả về phần tử cuối cùng, hoặc trả vềnullkhi danh sách trống.get_at(index)trả về phần tử, hoặcnullkhi chỉ số nằm ngoài khoảng từ0đếnsize() - 1.set_at(index, value)thay thế phần tử và trả vềtrue, hoặc trả vềfalsenếu chỉ số nằm ngoài danh sách.size(),has(item)vàclear()hoạt động giống như các phương thức của mảng có cùng tên.concat(other)thay cho toán tử+: phương thức này trả về mộtCustomListmới, gồm các phần tử của danh sách này, theo sau là các phần tử củaother, và không thay đổi danh sách nào._to_string()trả về các phần tử theo cách mảng in ra chúng, chẳng hạn như[3, 1, 4]._iter_init(),_iter_next()và_iter_get()cho phép vòng lặpforduyệt qua các phần tử.
Code được cung cấp đọc các số ban đầu (một dòng, cách nhau bằng dấu cách, có thể để trống), tạo danh sách, thêm 99 vào mảng đã truyền vào rồi in danh sách. Sau đó, code đọc số lượng lệnh và chạy từng lệnh trên một dòng: append N, pop, get I, set I N, has N, size, sum (một vòng lặp for duyệt qua danh sách), clear và concat N N .... Với đầu vào sau:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2chương trình in ra:
[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]Viết code của bạn trong custom_list.gd. main.gd chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
extends Node
func _ready():
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# Danh sách (list) phải giữ một bản sao riêng
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
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa selfPhương thứcThuộc tínhHàm khởi tạo (_init)Ôn tập: máy tính đơn giản4Tính đa hình
Xem lại cách ghi đè phương thứcĐịnh kiểu vịtLớp và phương thức trừu tượngThiết kế interfaceÔn tập: máy tính hình học7Tín hiệu
Tín hiệu là gì?Khai báo và phát tín hiệuKết nối với tín hiệuTín hiệu có đối sốÔn tập: hệ thống sức khỏe10Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổng hợp2Thuộc tính của lớp
Biến instance và biến staticHàm staticPhương thức thiết lập thuộc tínhPhương thức lấy thuộc tínhQuy ước về tính riêng tưÔn tập: trình quản lý tài khoản ngân hàng5Tính đóng gói
Thành viên công khai và riêng tưXác thực bằng phương thức setterẨn thông tinThuộc tính chỉ đọcÔn tập: hệ thống hồ sơ học sinh8Khái niệm OOP nâng cao
Kết hợp và kế thừaLớp bên trongNode dưới dạng thành phầnRefCounted và NodeEnum trong lớp3Kế thừa
Kế thừa cơ bảnTừ khóa superGhi đè phương thứcChuỗi kế thừaKiểm tra kiểu bằng isTổng kết: phân cấp nhân viên6Phương thức đặc biệt
Giới thiệu về phương thức ảoPhương thức _to_stringTrình lặp tùy chỉnhÔn tập: danh sách tùy chỉnhTự luyện tập: Trình biên dịch GDScript online