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 * heightvar r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30r.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 / 9t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0Por 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.
Desafío
FácilCompleta la clase Temperature en temperature.gd. Almacena un valor, celsius, y calcula las otras escalas a partir de él:
fahrenheit: el getter devuelvecelsius * 9 / 5 + 32, y el setter almacena(value - 32) * 5 / 9encelsiuskelvin: una propiedad de solo lectura cuyo getter devuelvecelsius + 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 KTu 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])
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
1Fundamentos de la programación orientada a objetos
Archivos externosIntroducción a la programación orientada a objetosClases vs. objetosLa palabra clave selfMétodosPropiedadesConstructor (_init)Repaso: calculadora sencilla4Polimorfismo
Repaso de la sobrescritura de métodosTipado patoClases y métodos abstractosDiseño de interfacesRepaso: calculadora de formas7Señales
¿Qué es una señal?Declarar y emitirConectarse a las señalesSeñales con argumentosRepaso: sistema de salud10Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite2Propiedades de clase
Variables de instancia y estáticasFunciones estáticasMétodos setter de propiedadesMétodos getter de propiedadesPrivado por convenciónRepaso: administrador de cuentas bancarias5Encapsulación
Miembros públicos y privadosValidación con settersOcultación de informaciónPropiedades de solo lecturaRepaso: sistema de registros de estudiantes8Conceptos avanzados de POO
Composición frente a herenciaClases internasNodos como componentesRefCounted frente a NodeEnums en clases3Herencia
Herencia básicaLa palabra clave superSobrescritura de métodosCadenas de herenciaComprobaciones de tipo con isRepaso: jerarquía de empleados6Métodos especiales
Introducción a los métodos virtualesEl método _to_stringIteradores personalizadosRepaso: lista personalizada9Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de GDScript online