Setter delle proprietà
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 11 di 65.
Una proprietà può eseguire del codice ogni volta che le viene assegnato un valore. Metti i due punti dopo la dichiarazione e aggiungi un blocco set(value): indentato, il suo setter:
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)value è ciò che viene assegnato. All'interno del setter, assegnare health memorizza il valore nella proprietà; non esegue di nuovo il setter. Questo setter mantiene health tra 0 e 100, qualunque cosa assegni il resto del programma:
var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0Il setter viene eseguito a ogni assegnazione, anche all'interno della classe: health -= 10 in un metodo di Player e health = start_health in _init() passano entrambi da esso. Solo il valore iniziale dopo = nella dichiarazione viene memorizzato senza chiamarlo.
Un setter può anche rifiutare un valore. Se non assegna la proprietà, il valore precedente rimane:
var level: int = 1:
set(value):
if value > level:
level = valueOmetti il tipo di value: set(value: int): è un errore. Il tipo della proprietà indica già cosa contiene.
Sfida
FacileAssegna alla proprietà health della classe Player in player.gd un setter che:
- mantenga la salute memorizzata tra
0emax_health: un valore maggiore viene memorizzato comemax_healthe uno negativo come0 - stampi
Player is down!quando la nuova salute è0e la vecchia salute era superiore a0
Il codice fornito legge quanti comandi seguono, poi ne legge uno per riga: damage N (player.health -= N), heal N (player.health += N) o set N (player.health = N). Dopo ogni comando stampa la salute. Per damage 30, heal 50, damage 120 e heal 10 stampa:
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10Il tuo codice va in player.gd. main.gd contiene il codice fornito per input/output e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
var player := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "damage":
player.health -= amount
elif parts[0] == "heal":
player.health += amount
elif parts[0] == "set":
player.health = amount
print("Health: %d" % player.health)
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