Konstruktor (_init)
Część sekcji Programowanie obiektowe ścieżki GDScript w Coddy. Lekcja 7 z 65.
Ustawianie każdej właściwości po new() zajmuje kilka wierszy i łatwo o którejś zapomnieć. Konstruktor przygotowuje obiekt w chwili jego tworzenia. W GDScript konstruktorem jest metoda _init():
# book.gd
class_name Book
extends RefCounted
var title: String
var author: String
var pages: int
func _init(book_title: String, book_author: String, page_count: int) -> void:
title = book_title
author = book_author
pages = page_countArgumenty przekazywane do new() trafiają do _init(), która uruchamia się automatycznie, zanim new() zwróci obiekt:
var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412Gdy _init() ma parametry, new() musi je przekazać: wywołanie Book.new() bez argumentów powoduje błąd zgłaszany przed uruchomieniem programu. Parametr z wartością domyślną jest opcjonalny:
func _init(book_title: String, book_author: String = "Unknown") -> void:Za pomocą tego konstruktora Book.new("Notes") tworzona jest książka, której autorem jest "Unknown".
Nazwy parametrów powyżej różnią się od nazw właściwości. Gdyby były takie same, zapisałbyś self.title = title, tak jak w lekcji o self.
Wyzwanie
ŁatwyUzupełnij klasę Book w pliku book.gd:
- konstruktor
_init(book_title, book_author, page_count)zapisuje swoje argumenty we właściwościachtitle,authoripages describe()zwraca'TITLE' by AUTHOR, PAGES pages, z tytułem w apostrofach
Dostarczony kod odczytuje liczbę kolejnych książek, a następnie po jednym wierszu na książkę z tytułem, autorem i liczbą stron oddzielonymi znakiem ;. Tworzy każdą książkę za pomocą Book.new(), wypisuje describe(), a na końcu wypisuje sumę właściwości pages. Dla wiersza Dune;Frank Herbert;412 wypisuje:
'Dune' by Frank Herbert, 412 pages
Total pages: 412Twój kod umieść w pliku book.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 count := int(OS.read_string_from_stdin())
var total := 0
for i in count:
var parts := OS.read_string_from_stdin().split(";")
var book := Book.new(parts[0], parts[1], int(parts[2]))
print(book.describe())
total += book.pages
print("Total pages: %d" % total)
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