Getter delle proprietà
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 12 di 65.
Un blocco get:, il getter della proprietà, viene eseguito ogni volta che la proprietà viene letta, e ciò che restituisce è il valore ottenuto da chi la legge. Usalo per un valore calcolato a partire da altre proprietà:
# 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 si legge come una variabile, senza parentesi, ma viene ricalcolata a ogni lettura, quindi corrisponde sempre alla larghezza e all’altezza attuali.
Una proprietà può avere entrambi i blocchi. Qui fahrenheit esegue solo la conversione: leggerla converte da celsius, mentre assegnarle un valore converte al contrario e memorizza il risultato in 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.0Per convenzione, una proprietà con solo get: è di sola lettura. Assegnarle un valore non è un errore, ma il getter ignora il valore assegnato: dopo r.area = 100, r.area restituisce ancora 30.
Sfida
FacileCompleta la classe Temperature in temperature.gd. Memorizza un valore, celsius, e calcola le altre scale a partire da esso:
fahrenheit: il getter restituiscecelsius * 9 / 5 + 32e il setter memorizza(value - 32) * 5 / 9incelsiuskelvin: una proprietà di sola lettura il cui getter restituiscecelsius + 273.15
Il codice fornito legge il numero di comandi successivi, poi ne legge uno per riga: c VALUE imposta celsius e f VALUE imposta fahrenheit. Dopo ogni comando stampa le tre proprietà con due cifre decimali. Per c 25, f 98.6 e c -40 stampa:
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 KIl tuo codice va inserito in temperature.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
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])
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