Salt Okunur Özellikler
Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 29 / 65.
Bazı değerler dışarıdan okunabilir olmalı ancak hiçbir zaman atanmamalıdır: nesne oluşturulurken bir kez verilen bir kimlik veya alan ya da toplam gibi başka verilerden hesaplanan bir değer. set bloğu olmayan bir get bloğuna sahip özellik bunu sağlar:
# ticket.gd
class_name Ticket
extends RefCounted
var _number: int
var number: int:
get:
return _number
func _init(start_number: int) -> void:
_number = start_numberOluşturucu, değeri özel _number içinde saklar ve genel number yalnızca bu değeri döndürür. Dışarıdan number değerine atama yapmak hata değildir, ancak hiçbir şeyi değiştirmez; çünkü alıcı _number değerini döndürmeye devam eder:
var ticket := Ticket.new(42)
ticket.number = 7
print(ticket.number) # 42Hesaplanan bir özelliğin kendine ait bir değeri yoktur: alıcısı, okunduğu her seferinde değeri hesaplar; böylece değer, geldiği verilerle her zaman eşleşir:
# room.gd
class_name Room
extends RefCounted
var width: int = 4
var length: int = 5
var area: int:
get:
return width * lengthvar room := Room.new()
print(room.area) # 20
room.width = 6
print(room.area) # 30Basit bir var area, width veya length her değiştiğinde elle güncellenmek zorunda kalır; unutulan tek bir güncelleme bile yanlış kalmasına neden olur. Hesaplanan area güncelliğini yitiremez ve hiç kimse ona yanlış bir değer atayamaz.
Her nesne için aynı olan ve hiç değişmeyen bir değer için sınıfta bir sabit kullanın: const MAX_GUESTS = 4. Bir sabite değer atama hatası, program çalışmadan önce bildirilir.
Görev
Kolayorder.gd dosyasındaki Order sınıfı, kimliğini _id içinde ve her satırın toplamını (fiyat çarpı miktar) _line_totals içinde saklar. Dört genel özelliğini get bloklarıyla salt okunur hâle getir:
order_id,_iddeğerini döndürür.subtotal,_line_totalstoplamını döndürür.shipping, ara toplam50veya daha fazlaysa0, aksi hâlde5döndürür.total, ara toplam ile kargo ücretinin toplamını döndürür.
Sağlanan kod sipariş kimliğini, ürün sayısını ve ardından her ürün için bir price quantity satırını okur. Her üründen sonra ara toplamı, kargo ücretini ve toplamı yazdırır. Sonunda dört özelliğin tümüne 0 atamayı dener, ardından değişmemiş olması gereken kimliği ve toplamı yazdırır. Kimlik 7 ve ürünler 12 2 ile 30 1 için şunları yazdırır:
Subtotal 24, shipping 5, total 29
Subtotal 54, shipping 0, total 54
Order #7: 54Kodunu order.gd dosyasına yaz. main.gd, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
extends Node
func _ready():
# Sağlanan giriş/çıkış kodu: olduğu gibi bırakın
var order := Order.new(int(OS.read_string_from_stdin()))
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
order.add_item(int(parts[0]), int(parts[1]))
print("Subtotal %d, shipping %d, total %d" % [order.subtotal, order.shipping, order.total])
# Salt okunur özelliklerin üzerine yazmaya çalışan kod
order.order_id = 0
order.subtotal = 0
order.shipping = 0
order.total = 0
print("Order #%d: %d" % [order.order_id, order.total])
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Harici DosyalarNesne Yönelimli Programlamaya GirişSınıflar ve Nesnelerself Anahtar KelimesiMetotlarÖzelliklerKurucu (_init)Tekrar - Basit Hesap Makinesi4Çok Biçimlilik
Metot Ezme Konusuna Yeniden BakışÖrdek TiplemesiSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı7Sinyaller
Sinyal Nedir?Tanımlama ve Sinyal GöndermeSinyallere BağlanmaArgümanlı SinyallerTekrar - Sağlık Sistemi10Tasarım Kalıpları 2. Bölüm
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıBileşik Kalıp2Sınıf Özellikleri
Örnek ve Statik DeğişkenlerStatik FonksiyonlarÖzellik AyarlayıcılarıÖzellik AlıcılarıGeleneksel Olarak ÖzelTekrar - Banka Hesabı Yöneticisi5Kapsülleme
Public ve Private ÜyelerSetter'larla DoğrulamaBilgi GizlemeSalt Okunur ÖzelliklerTekrar - Öğrenci Kayıt SistemiKendi başına pratik yap: Online GDScript derleyicisi