Menu
CoddyTech

Métodos getter de propiedades

Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 12 de 65.

Un bloque get:, el getter de la propiedad, se ejecuta cada vez que se lee la propiedad, y lo que devuelve es el valor que obtiene quien la lee. Úsalo para un valor calculado a partir de otras propiedades:

# 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 se lee como una variable, sin paréntesis, pero se calcula de nuevo en cada lectura, así que siempre coincide con el ancho y la altura actuales.

Una propiedad puede tener ambos bloques. Aquí fahrenheit solo convierte: al leerla, convierte de celsius, y al asignarle un valor, convierte de vuelta y almacena el resultado en 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

Por convención, una propiedad que solo tiene get: es de solo lectura. Asignarle un valor no es un error, pero el getter ignora lo que se le asignó: después de r.area = 100, r.area sigue devolviendo 30.

challenge icon

Desafío

Fácil

Completa la clase Temperature en temperature.gd. Almacena un valor, celsius, y calcula las otras escalas a partir de él:

  • fahrenheit: el getter devuelve celsius * 9 / 5 + 32, y el setter almacena (value - 32) * 5 / 9 en celsius
  • kelvin: una propiedad de solo lectura cuyo getter devuelve celsius + 273.15

El código proporcionado lee cuántos comandos siguen y, después, uno por línea: c VALUE establece celsius y f VALUE establece fahrenheit. Después de cada comando, imprime las tres propiedades con dos decimales. Para c 25, f 98.6 y c -40, 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

Tu código va en temperature.gd. main.gd contiene el código de entrada/salida proporcionado y no se puede editar.

Pruébalo tú mismo

extends Node

func _ready():
	# Código de entrada/salida proporcionado: mantenlo tal 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de GDScript online