Proprietà
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 6 di 65.
Le variabili dichiarate da una classe sono le sue proprietà (chiamate anche variabili membro): i dati che ogni oggetto contiene. Dichiarale all'inizio della classe, ciascuna con un tipo e un valore iniziale:
# 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 proprietà dichiarata senza un valore parte dal valore predefinito del suo tipo: 0 per int, "" per String, false per bool e un array vuoto per Array[String].
Fuori dalla classe leggi e modifichi una proprietà con un punto. Nei metodi della classe usi il suo nome:
var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]Ogni oggetto riceve la propria copia di ogni proprietà, array inclusi: [] crea un nuovo array vuoto per ogni giocatore, quindi l'inventario di un altro giocatore rimane vuoto.
Il tipo viene controllato: p.level = "max" è un errore segnalato prima che il programma venga eseguito, perché level contiene un int.
Sfida
FacileCompleta la classe Player in player.gd. Dichiara queste proprietà:
player_name, unaStringche inizia come"Hero"level, unintche inizia da1hp, unintche inizia da100inventory, unArray[String]che inizia vuoto
Poi completa il metodo describe(). Restituisce NAME (level LEVEL, HP hp): ITEMS, dove ITEMS è l'inventario unito con ", ", oppure no items quando l'inventario è vuoto.
Il codice fornito legge un nome per un giocatore, poi quanti comandi seguono e infine i comandi: hit AMOUNT, item NAME oppure level. Modifica direttamente le proprietà del giocatore e infine stampa describe() per quel giocatore e per un secondo giocatore che non ha mai modificato. Per Ada e i comandi hit 30, item sword, level e item shield, stampa:
Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no itemsIl tuo codice va in player.gd. main.gd contiene il codice fornito per l'input/output e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Supplied input/output code: keep it as it is
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())
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online