Menu
CoddyTech

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 * height
var r := Rectangle.new()
print(r.area) # 12
r.width = 10
print(r.area) # 30

r.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 / 9
t.celsius = 25.0
print(t.fahrenheit) # 77.0
t.fahrenheit = 98.6
print(t.celsius) # 37.0

Per 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.

challenge icon

Sfida

Facile

Completa la classe Temperature in temperature.gd. Memorizza un valore, celsius, e calcola le altre scale a partire da esso:

  • fahrenheit: il getter restituisce celsius * 9 / 5 + 32 e il setter memorizza (value - 32) * 5 / 9 in celsius
  • kelvin: una proprietà di sola lettura il cui getter restituisce celsius + 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 K

Il 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])
quiz iconMettiti alla prova

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

Esercitati da solo: Compilatore GDScript online