Getter property
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 12 dari 65.
Blok get:, yaitu getter milik property, berjalan setiap kali property dibaca, dan nilai yang dikembalikannya adalah nilai yang diterima pembaca. Gunakan blok ini untuk nilai yang dihitung dari property lain:
# 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 dibaca seperti variabel, tanpa tanda kurung, tetapi nilainya dihitung ulang setiap kali dibaca, sehingga selalu sesuai dengan lebar dan tinggi saat ini.
Sebuah property dapat memiliki kedua blok. Di sini fahrenheit hanya melakukan konversi: membacanya akan mengonversi dari celsius, sedangkan menetapkan nilainya akan mengonversi kembali dan menyimpan hasilnya di 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.0Property yang hanya memiliki get: secara konvensi bersifat hanya baca. Menetapkan nilai padanya bukanlah error, tetapi getter mengabaikan nilai yang ditetapkan: setelah r.area = 100, r.area tetap mengembalikan 30.
Tantangan
MudahLengkapi class Temperature di temperature.gd. Class ini menyimpan satu nilai, celsius, dan menghitung skala lainnya dari nilai tersebut:
fahrenheit: getter mengembalikancelsius * 9 / 5 + 32, dan setter menyimpan(value - 32) * 5 / 9kecelsiuskelvin: property hanya-baca dengan getter yang mengembalikancelsius + 273.15
Kode yang disediakan membaca jumlah perintah berikutnya, lalu membaca satu per baris: c VALUE mengatur celsius dan f VALUE mengatur fahrenheit. Setelah setiap perintah, kode mencetak ketiga property dengan dua angka desimal. Untuk c 25, f 98.6, dan c -40, hasilnya:
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 KTulis kodemu di temperature.gd. main.gd berisi kode input/output yang disediakan dan tidak dapat diedit.
Coba sendiri
extends Node
func _ready():
# Kode input/output yang disediakan: biarkan tetap seperti ini
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])
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online