Menu
CoddyTech

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ã amarelo

Escrever 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 = color

Sem self., a linha color = color copia o parâmetro para si mesmo, e o carro mantém sua cor antiga.

challenge icon

Desafio

Fácil

Complete 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 nomes
  • describe() retorna This car is a YEAR MAKE MODEL, por exemplo This 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 Corolla

Seu 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())
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