Menu
CoddyTech

Property Hanya-Baca

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 29 dari 65.

Beberapa nilai sebaiknya dapat dibaca dari luar, tetapi tidak pernah ditetapkan: ID yang diberikan satu kali saat object dibuat, atau nilai yang dihitung dari data lain, seperti luas atau total. Property dengan blok get dan tanpa blok set melakukan hal itu:

# 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

Konstruktor menyimpan nilai di dalam _number privat, dan number publik hanya mengembalikannya. Menetapkan nilai ke number dari luar bukanlah error, tetapi tidak mengubah apa pun, karena getter terus mengembalikan _number:

var ticket := Ticket.new(42)
ticket.number = 7
print(ticket.number) # 42

property terhitung tidak memiliki nilai sendiri: getter-nya menghitung nilainya setiap kali dibaca, sehingga nilainya selalu sesuai dengan data asalnya:

# 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

var area biasa harus diperbarui secara manual setiap kali width atau length berubah, dan satu pembaruan yang terlupa akan membuatnya salah. area yang dihitung tidak akan kedaluwarsa, dan tidak ada yang bisa memberikan nilai yang salah kepadanya.

Untuk nilai yang sama bagi setiap object dan tidak pernah berubah, gunakan konstanta di dalam class: const MAX_GUESTS = 4. Penetapan nilai ke konstanta akan dilaporkan sebelum program dijalankan.

challenge icon

Tantangan

Mudah

class Order di order.gd menyimpan ID-nya di _id dan total setiap baris di _line_totals (harga dikali jumlah). Jadikan keempat property publiknya hanya-baca dengan blok get:

  • order_id mengembalikan _id.
  • subtotal mengembalikan jumlah _line_totals.
  • shipping mengembalikan 0 saat subtotal bernilai 50 atau lebih, selain itu 5.
  • total mengembalikan subtotal ditambah shipping.

Kode yang disediakan membaca ID pesanan, jumlah item, lalu satu baris price quantity untuk setiap item. Setelah setiap item, kode mencetak subtotal, shipping, dan total. Di akhir, kode mencoba menetapkan nilai 0 ke keempat property, lalu mencetak ID dan total, yang harus tetap tidak berubah. Untuk ID 7 dan item 12 2 serta 30 1, kode mencetak:

Subtotal 24, shipping 5, total 29
Subtotal 54, shipping 0, total 54
Order #7: 54

Tulis kodemu di order.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 apa adanya
	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])
	# Kode yang mencoba menimpa property yang hanya bisa dibaca
	order.order_id = 0
	order.subtotal = 0
	order.shipping = 0
	order.total = 0
	print("Order #%d: %d" % [order.order_id, order.total])
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler GDScript online