Menu
CoddyTech

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_number

Oluş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) # 42

Hesaplanan 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 * length
var room := Room.new()
print(room.area) # 20
room.width = 6
print(room.area) # 30

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

challenge icon

Görev

Kolay

order.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, _id değerini döndürür.
  • subtotal, _line_totals toplamını döndürür.
  • shipping, ara toplam 50 veya daha fazlaysa 0, aksi hâlde 5 dö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: 54

Kodunu 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])
quiz iconKendini test et

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

Kendi başına pratik yap: Online GDScript derleyicisi