Menu
CoddyTech

Métodos Getters de Propriedade

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

Um bloco get:, o getter da propriedade, é executado toda vez que a propriedade é lida, e o que ele retorna é o valor que o leitor obtém. Use-o para um valor calculado a partir de outras propriedades:

# rectangle.gd
var width: int = 4
var height: int = 3
var area: int:
	get:
		return width * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.area é lido como uma variável, sem parênteses, mas é calculado novamente a cada leitura, então sempre corresponde à largura e à altura atuais.

Uma propriedade pode ter ambos os blocos. Aqui, fahrenheit apenas converte: ao lê-la, ela converte de celsius, e ao atribuir um valor a ela, converte de volta e armazena o resultado em celsius:

# temperature.gd
var celsius: float = 0.0
var fahrenheit: float:
	get:
		return celsius * 9 / 5 + 32
	set(value):
		celsius = (value - 32) * 5 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

Uma propriedade com apenas get: é somente leitura por convenção. Atribuir um valor a ela não é um erro, mas o getter ignora o que foi atribuído: após r.area = 100, r.area ainda retorna 30.

challenge icon

Desafio

Fácil

Complete a classe Temperature em temperature.gd. Ela armazena um valor, celsius, e calcula as outras escalas a partir dele:

  • fahrenheit: o getter retorna celsius * 9 / 5 + 32, e o setter armazena (value - 32) * 5 / 9 em celsius
  • kelvin: uma propriedade somente para leitura cujo getter retorna celsius + 273.15

O código fornecido lê quantos comandos vêm a seguir e, então, um por linha: c VALUE define celsius e f VALUE define fahrenheit. Após cada comando, ele imprime as três propriedades com duas casas decimais. Para c 25, f 98.6 e c -40, ele imprime:

25.00 C | 77.00 F | 298.15 K
37.00 C | 98.60 F | 310.15 K
-40.00 C | -40.00 F | 233.15 K

Seu código deve ficar em temperature.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 temp := Temperature.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "c":
			temp.celsius = float(parts[1])
		else:
			temp.fahrenheit = float(parts[1])
		print("%.2f C | %.2f F | %.2f K" % [temp.celsius, temp.fahrenheit, temp.kelvin])
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