A palavra-chave self
Parte da seção Programação orientada a objetos do Journey de GDScript da Coddy. Lição 4 de 65.
Uma função declarada em uma classe é executada em um objeto específico: aquele que vem antes do ponto na chamada. Dentro da função, a palavra-chave self se refere a esse objeto.
# car.gd
class_name Car
extends RefCounted
var color: String = "Red"
var model: String = "Sedan"
func describe() -> void:
print("I am a %s %s" % [self.color, self.model])my_car.describe() executa describe() com self definido como my_car, então a função lê as variáveis desse carro. Você nunca passa self por conta própria:
var my_car := Car.new()
var taxi := Car.new()
taxi.color = "Yellow"
my_car.describe() # Eu sou um sedã vermelho
taxi.describe() # Eu sou um sedã amareloEscrever self. é opcional. Dentro de uma função da classe, color sozinho já significa o color do objeto, então print("I am a %s %s" % [color, model]) faz a mesma coisa.
Você precisa de self quando um parâmetro tem o mesmo nome que uma variável da classe. Dentro da função, o nome se refere ao parâmetro, e self. seleciona a variável do objeto:
func repaint(color: String) -> void:
self.color = colorSem self., a linha color = color copia o parâmetro para si mesmo, e o carro mantém sua cor antiga.
Desafio
FácilComplete as duas funções da classe Car em car.gd:
set_info(year, make, model)armazena seus três parâmetros nas variáveis do carro com os mesmos nomesdescribe()retornaThis car is a YEAR MAKE MODEL, por exemploThis car is a 2020 Toyota Corolla
O código fornecido lê quantos carros vêm a seguir e, então, uma linha para cada carro (year make model). Ele cria cada carro, chama set_info() e imprime describe() para cada carro. Para a linha 2020 Toyota Corolla, ele imprime:
This car is a 2020 Toyota CorollaSeu código deve ficar em car.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 cars: Array[Car] = []
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var car := Car.new()
car.set_info(int(parts[0]), parts[1], parts[2])
cars.append(car)
for car in cars:
print(car.describe())
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