Menu
CoddyTech

Методы

Часть раздела Объектно-ориентированное программирование путешествия по 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() без аргумента — это ошибка, о которой сообщается до запуска программы.

challenge icon

Задание

Легко

Заверши методы класса BankAccount в файле bank_account.gd. Счёт хранит деньги в переменной balance, начальное значение которой — 0.

  • deposit(amount) добавляет amount к балансу
  • withdraw(amount) вычитает amount и возвращает true. Если amount превышает баланс, метод ничего не меняет и возвращает false
  • get_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())
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript