Методы
Часть раздела Объектно-ориентированное программирование путешествия по GDScript на Coddy. Урок 5 из 65.
Функция, объявленная внутри класса, — это метод: действие, которое могут выполнять объекты класса. Как и любая функция, метод может принимать параметры и возвращать значение, а также читать и изменять переменные объекта:
# score_board.gd
class_name ScoreBoard
extends RefCounted
var points: int = 0
func greet() -> void:
print("Scoreboard ready")
func add(amount: int) -> void:
points += amount
func doubled() -> int:
return points * 2
func add_bonus() -> int:
add(10)
return pointsВызови метод у объекта с помощью точки и передай аргументы в скобках:
var board := ScoreBoard.new()
board.greet() # Табло готово
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15Внутри класса метод вызывает другой метод того же объекта по его имени: add(10) в add_bonus() означает self.add(10).
Метод, объявленный с -> void, ничего не возвращает, а метод, объявленный с -> int, должен возвращать значение типа int. Каждый вызов работает со своим объектом: board.add(5) изменяет board.points и не затрагивает другие табло.
Вызов должен соответствовать объявлению: board.add() без аргумента — это ошибка, о которой сообщается до запуска программы.
Задание
ЛегкоЗаверши методы класса BankAccount в файле bank_account.gd. Счёт хранит деньги в переменной balance, начальное значение которой — 0.
deposit(amount)добавляетamountк балансуwithdraw(amount)вычитаетamountи возвращаетtrue. Еслиamountпревышает баланс, метод ничего не меняет и возвращаетfalseget_balance()возвращает баланс
Предоставленный код считывает количество следующих команд, а затем по одной команде в каждой строке: deposit AMOUNT или withdraw AMOUNT. Он выводит строку для каждой команды и итоговый баланс. Для deposit 50 и withdraw 80 он выводит:
Deposited 50
Not enough money for 80
Current balance: $50Твой код нужно разместить в bank_account.gd. В файле main.gd находится предоставленный код ввода/вывода, который нельзя редактировать.
Попробуйте сами
extends Node
func _ready():
# Предоставленный код ввода/вывода: оставьте его без изменений
var account := BankAccount.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "deposit":
account.deposit(amount)
print("Deposited %d" % amount)
elif account.withdraw(amount):
print("Withdrew %d" % amount)
else:
print("Not enough money for %d" % amount)
print("Current balance: $%d" % account.get_balance())
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово selfМетодыСвойстваКонструктор (_init)Повторение: простой калькулятор4Полиморфизм
Переопределение методов: повторениеУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовПовторение — калькулятор фигур7Сигналы
Что такое сигнал?Объявление и отправкаПодключение к сигналамСигналы с аргументамиПовторение — система здоровья10Паттерны проектирования. Часть 2
Паттерн «Команда»Паттерн «Адаптер»Паттерн «Декоратор»Паттерн «Шаблонный метод»Паттерн «Состояние»Паттерн «Компоновщик»2Свойства классов
Переменные экземпляра и классаСтатические функцииСеттеры свойствГеттеры свойствПриватность по соглашениюПовторение — менеджер банковского счёта5Инкапсуляция
Открытые и закрытые членыПроверка данных с помощью сеттеровСокрытие информацииСвойства только для чтенияПовторение — система учета студентов8Продвинутые концепции ООП
Композиция и наследованиеВнутренние классыУзлы как компонентыRefCounted и NodeПеречисления в классах11Проект: Управление библиотекой
Обзор проектаКлассы книг и пользователей3Наследование
Основы наследованияКлючевое слово superПереопределение методовЦепочки наследованияПроверка типов с помощью isПовторение — иерархия сотрудников6Специальные методы
Введение в виртуальные методыМетод _to_stringПользовательские итераторыПовторение: пользовательский список9Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн «Одиночка»Паттерн «Фабрика»Паттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор GDScript