Menu
CoddyTech

Costruttore (_init)

Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 7 di 65.

Impostare ogni proprietà dopo new() richiede diverse righe ed è facile dimenticarne una. Un costruttore configura un oggetto al momento della sua creazione. In GDScript il costruttore è il metodo _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

Gli argomenti che passi a new() vengono passati a _init(), che viene eseguito automaticamente prima che new() restituisca l'oggetto:

var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412

Quando _init() ha parametri, new() deve passarli: Book.new() senza argomenti è un errore segnalato prima che il programma venga eseguito. Un parametro con un valore predefinito è facoltativo:

func _init(book_title: String, book_author: String = "Unknown") -> void:

Con questo costruttore, Book.new("Notes") crea un libro il cui autore è "Unknown".

I nomi dei parametri sopra differiscono dai nomi delle proprietà. Se fossero uguali, scriveresti self.title = title, come nella lezione su self.

challenge icon

Sfida

Facile

Completa la classe Book in book.gd:

  • il costruttore _init(book_title, book_author, page_count) memorizza i suoi argomenti nelle proprietà title, author e pages
  • describe() restituisce 'TITLE' by AUTHOR, PAGES pages, con il titolo tra apici singoli

Il codice fornito legge quanti libri seguono, poi una riga per ogni libro con il titolo, l'autore e il numero di pagine separati da ;. Crea ogni libro con Book.new(), stampa describe() e infine stampa il totale delle proprietà pages. Per la riga Dune;Frank Herbert;412 stampa:

'Dune' by Frank Herbert, 412 pages
Total pages: 412

Il tuo codice va in book.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

extends Node

func _ready():
	# Codice di input/output fornito: lascialo così com'è
	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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore GDScript online