Повторение: пользовательский список
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 34 из 65.
Задание
СреднеНапиши CustomList в custom_list.gd — класс, который оборачивает приватный массив _items и предоставляет необходимые списку возможности с помощью методов и виртуальных методов:
_init(items = [])сохраняет копиюitems, поэтому последующие изменения переданного массива не влияют на список.append(item)добавляет элемент в конец.pop_back()удаляет и возвращает последний элемент или возвращаетnull, если список пуст.get_at(index)возвращает элемент илиnull, если индекс находится вне диапазона от0доsize() - 1.set_at(index, value)заменяет элемент и возвращаетtrueлибо возвращаетfalse, если индекс находится за пределами списка.size(),has(item)иclear()работают так же, как одноимённые методы Array.concat(other)заменяет оператор+: он возвращает новыйCustomList, содержащий сначала элементы этого списка, а затем элементыother, и не изменяет ни один из списков._to_string()возвращает элементы в том же виде, в каком Array выводит их, например[3, 1, 4]._iter_init(),_iter_next()и_iter_get()позволяют циклуforперебирать элементы.
Предоставленный код считывает начальные числа (одна строка, числа разделены пробелами; строка может быть пустой), создаёт список, добавляет 99 в переданный массив и выводит список. Затем он считывает количество команд и выполняет по одной команде в каждой строке: append N, pop, get I, set I N, has N, size, sum (цикл for по списку), clear и concat N N .... Для этих входных данных:
3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2он выводит:
[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]Твой код должен находиться в custom_list.gd. В main.gd находится предоставленный код ввода/вывода, его нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода-вывода: оставьте его без изменений
var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
var list := CustomList.new(numbers)
# Список должен хранить собственную копию
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
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript