Propiedades
Parte de la sección Programación orientada a objetos del Journey de GDScript de Coddy. Lección 6 de 65.
Las variables que declara una clase son sus propiedades (también llamadas variables miembro): los datos que lleva cada objeto. Decláralas en la parte superior de la clase, cada una con un tipo y un valor inicial:
# player.gd
class_name Player
extends RefCounted
var player_name: String = "Hero"
var level: int = 1
var hp: float = 100.0
var inventory: Array[String] = []Una propiedad declarada sin un valor comienza con el valor predeterminado de su tipo: 0 para int, "" para String, false para bool y un arreglo vacío para Array[String].
Fuera de la clase, lees y cambias una propiedad con un punto. Dentro de los métodos de la clase, usas su nombre:
var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]Cada objeto obtiene su propia copia de cada propiedad, incluidos los arreglos: [] crea un nuevo arreglo vacío para cada jugador, así que el inventario de otro jugador permanece vacío.
Se comprueba el tipo: p.level = "max" es un error que se informa antes de que se ejecute el programa, porque level contiene un int.
Desafío
FácilCompleta la clase Player en player.gd. Declara estas propiedades:
player_name, unStringque empieza como"Hero"level, unintque empieza en1hp, unintque empieza en100inventory, unArray[String]que empieza vacío
Después, completa el método describe(). Devuelve NAME (level LEVEL, HP hp): ITEMS, donde ITEMS es el inventario unido con ", ", o no items cuando el inventario está vacío.
El código proporcionado lee un nombre para un jugador, luego cuántos comandos siguen y, después, los comandos: hit AMOUNT, item NAME o level. Cambia directamente las propiedades del jugador y, finalmente, imprime describe() para ese jugador y para un segundo jugador al que nunca modificó. Para Ada y los comandos hit 30, item sword, level y item shield, imprime:
Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no itemsTu código va en player.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 hero := Player.new()
hero.player_name = OS.read_string_from_stdin()
var guest := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
match parts[0]:
"hit":
hero.hp -= int(parts[1])
"item":
hero.inventory.append(parts[1])
"level":
hero.level += 1
print(hero.describe())
print(guest.describe())
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