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 pointsWywoł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()) # 15Wewną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.
Wyzwanie
ŁatwyUzupeł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)dodajeamountdo saldawithdraw(amount)odejmujeamounti zwracatrue. Gdyamountjest większe niż saldo, niczego nie zmienia i zwracafalseget_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: $50Twó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())
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe selfMetodyWłaściwościKonstruktor (_init)Powtórka – prosty kalkulator4Polimorfizm
Ponowne omówienie przesłaniania metodDuck typingKlasy i metody abstrakcyjneProjektowanie interfejsówPowtórzenie – kalkulator kształtów7Sygnały
Czym jest sygnał?Deklarowanie i emitowanieŁączenie z sygnałamiSygnały z argumentamiPodsumowanie — system zdrowia10Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu2Właściwości klas
Zmienne instancji a zmienne statyczneFunkcje statyczneSettery właściwościGettery właściwościPrywatne z konwencjiPodsumowanie — menedżer kont bankowych5Enkapsulacja
Elementy publiczne i prywatneWalidacja za pomocą setterówUkrywanie informacjiWłaściwości tylko do odczytuPodsumowanie – system ewidencji uczniów8Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieKlasy wewnętrzneWęzły jako komponentyRefCounted a NodeTypy wyliczeniowe w klasach11Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superNadpisywanie metodŁańcuchy dziedziczeniaSprawdzanie typów za pomocą isPodsumowanie – hierarchia pracowników6Metody specjalne
Wprowadzenie do metod wirtualnychMetoda _to_stringWłasne iteratoryPodsumowanie — własna lista9Wzorce projektowe — część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator GDScript online