Menu
CoddyTech

Construtor (_init)

Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 7 de 65.

Definir cada propriedade após new() exige várias linhas, e é fácil esquecer uma. Um construtor configura um objeto no momento em que ele é criado. Em GDScript, o construtor é o método _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

Os argumentos que você passa para new() são enviados para _init(), que é executado automaticamente antes de new() retornar o objeto:

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

Quando _init() tem parâmetros, new() deve passá-los: Book.new() sem argumentos é um erro informado antes de o programa ser executado. Um parâmetro com um valor padrão é opcional:

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

Com este construtor, Book.new("Notes") cria um livro cujo autor é "Unknown".

Os nomes dos parâmetros acima diferem dos nomes das propriedades. Se fossem iguais, você escreveria self.title = title, como na lição sobre self.

challenge icon

Desafio

Fácil

Complete a classe Book em book.gd:

  • o construtor _init(book_title, book_author, page_count) armazena seus argumentos nas propriedades title, author e pages
  • describe() retorna 'TITLE' by AUTHOR, PAGES pages, com o título entre aspas simples

O código fornecido lê quantos livros vêm a seguir e, depois, uma linha por livro com o título, o autor e a quantidade de páginas separados por ;. Ele cria cada livro com Book.new(), imprime describe() e, por fim, imprime o total das propriedades pages. Para a linha Dune;Frank Herbert;412, ele imprime:

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

Seu código deve ficar em book.gd. main.gd contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

extends Node

func _ready():
	# Código de entrada/saída fornecido: mantenha-o como está
	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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de GDScript online