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_countOs 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) # 412Quando _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.
Desafio
FácilComplete a classe Book em book.gd:
- o construtor
_init(book_title, book_author, page_count)armazena seus argumentos nas propriedadestitle,authorepages 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: 412Seu 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)
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
1Fundamentos da POO
Arquivos externosIntrodução à POOClasses vs. objetosA palavra-chave selfMétodosPropriedadesConstrutor (_init)Revisão - Calculadora simples4Polimorfismo
Revisitando a Sobrescrita de MétodosDuck TypingClasses e Métodos AbstratosDesign de InterfacesRevisão - Calculadora de Formas7Sinais
O que é um sinal?Declarando e emitindoConectando-se a sinaisSinais com argumentosRevisão - Sistema de saúde10Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite2Propriedades de Classe
Variáveis de Instância vs. EstáticasFunções EstáticasMétodos Setters de PropriedadeMétodos Getters de PropriedadePrivado por ConvençãoRecapitulando: Gerenciador de Conta Bancária5Encapsulamento
Membros públicos e privadosValidação com settersOcultação de informaçõesPropriedades somente para leituraRevisão - Sistema de registros de alunos8Conceitos Avançados de POO
Composição vs. HerançaClasses InternasNós como ComponentesRefCounted vs. NodeEnums em Classes3Herança
Herança básicaA palavra-chave superSobrescrita de métodosCadeias de herançaVerificações de tipo com isRevisão - Hierarquia de funcionários6Métodos especiais
Introdução aos métodos virtuaisO método _to_stringIteradores personalizadosRevisão - Lista personalizada9Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de GDScript online