Menu
CoddyTech

Metody

Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 5 z 65.

Funkcja zadeklarowana wewnątrz klasy to metoda: coś, co obiekty tej klasy potrafią robić. Jak każda funkcja, metoda może przyjmować parametry i zwracać wartość, a także odczytywać i zmieniać zmienne obiektu:

# 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

Wywołaj metodę obiektu, używając kropki, i przekaż argumenty w nawiasach:

var board := ScoreBoard.new()
board.greet() # Tablica wyników gotowa
board.add(5)
print(board.doubled()) # 10
print(board.add_bonus()) # 15

Wewnątrz klasy metoda wywołuje inną metodę tego samego obiektu, podając jej nazwę: add(10) w add_bonus() oznacza self.add(10).

Metoda zadeklarowana jako -> void nic nie zwraca, a metoda zadeklarowana jako -> int musi zwracać wartość typu int. Każde wywołanie działa na własnym obiekcie: board.add(5) zmienia board.points, a nie żaden inny wynik.

Wywołanie musi być zgodne z deklaracją: board.add() bez argumentu jest błędem zgłaszanym przed uruchomieniem programu.

challenge icon

Wyzwanie

Łatwy

Uzupełnij metody klasy BankAccount w pliku bank_account.gd. Konto przechowuje swoje środki w zmiennej balance, której wartość początkowa to 0.

  • deposit(amount) dodaje amount do salda
  • withdraw(amount) odejmuje amount i zwraca true. Gdy amount jest większe niż saldo, niczego nie zmienia i zwraca false
  • get_balance() zwraca saldo

Dostarczony kod odczytuje liczbę kolejnych poleceń, a następnie jedno polecenie w każdym wierszu: deposit AMOUNT lub withdraw AMOUNT. Wypisuje wiersz dla każdego polecenia oraz końcowe saldo. Dla deposit 50 i withdraw 80 wypisuje:

Deposited 50
Not enough money for 80
Current balance: $50

Twój kod umieść w pliku bank_account.gd. Plik main.gd zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

extends Node

func _ready():
	# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
	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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator GDScript online