Menu
CoddyTech

Setter property

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

Sebuah property dapat menjalankan kode setiap kali diberi nilai. Letakkan titik dua setelah deklarasi dan tambahkan blok set(value): dengan indentasi, yaitu setter-nya:

# player.gd
var health: int = 100:
	set(value):
		health = clampi(value, 0, 100)

value adalah nilai yang ditetapkan. Di dalam setter, menetapkan health akan menyimpan nilai ke dalam property; tindakan ini tidak menjalankan setter lagi. Setter ini menjaga health tetap di antara 0 dan 100, apa pun yang ditetapkan oleh bagian lain program:

var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0

Setter dijalankan setiap kali ada penugasan, termasuk di dalam class: health -= 10 dalam method Player dan health = start_health dalam _init() sama-sama melewatinya. Hanya nilai awal setelah = dalam deklarasi yang disimpan tanpa memanggilnya.

Sebuah setter juga dapat menolak nilai. Jika setter tidak menetapkan property, nilai lama akan tetap ada:

var level: int = 1:
	set(value):
		if value > level:
			level = value

Hilangkan tipe dari value: set(value: int): adalah error. Tipe property itu sendiri sudah menyatakan nilai yang disimpannya.

challenge icon

Tantangan

Mudah

Beri property health dari class Player di player.gd sebuah setter yang:

  • menjaga health yang disimpan tetap di antara 0 dan max_health: nilai yang lebih besar disimpan sebagai max_health dan nilai negatif disimpan sebagai 0
  • mencetak Player is down! ketika health baru bernilai 0 dan health lama lebih dari 0

Kode yang disediakan membaca jumlah perintah berikutnya, lalu satu per baris: damage N (player.health -= N), heal N (player.health += N) atau set N (player.health = N). Setelah setiap perintah, kode mencetak health. Untuk damage 30, heal 50, damage 120 dan heal 10, kode mencetak:

Health: 70
Health: 100
Player is down!
Health: 0
Health: 10

Tulis kodemu di player.gd. main.gd berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

extends Node

func _ready():
	# Kode input/output yang disediakan: biarkan apa adanya
	var player := Player.new()
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		var amount := int(parts[1])
		if parts[0] == "damage":
			player.health -= amount
		elif parts[0] == "heal":
			player.health += amount
		elif parts[0] == "set":
			player.health = amount
		print("Health: %d" % player.health)
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