Menu
CoddyTech

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_count

Argumenty 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) # 412

Gdy _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.

challenge icon

Wyzwanie

Łatwy

Uzupełnij klasę Book w pliku book.gd:

  • konstruktor _init(book_title, book_author, page_count) zapisuje swoje argumenty we właściwościach title, author i pages
  • 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: 412

Twó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)
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