Menu
CoddyTech

Geleneksel Olarak Özel

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 13 / 65.

GDScript'te private anahtar sözcüğü yoktur: bir nesnenin tüm özelliklerine ve yöntemlerine diğer betiklerden erişilebilir. Godot'nun kuralı, başına alt çizgi koymaktır. Aşağıdaki _coins ve _is_valid() yalnızca sınıfın kendi kodunda kullanılmak üzere tasarlanmıştır:

# wallet.gd
class_name Wallet
extends RefCounted

var _coins: int = 0

func add(amount: int) -> void:
	if _is_valid(amount):
		_coins += amount

func spend(amount: int) -> bool:
	if not _is_valid(amount) or amount > _coins:
		return false
	_coins -= amount
	return true

func get_coins() -> int:
	return _coins

func _is_valid(amount: int) -> bool:
	return amount > 0

Diğer betikler genel yöntemleri kullanır ve bunlar her değişikliği denetler: spend(), cüzdandaki coin sayısından fazla coin harcanmasını reddeder; böylece coin sayısı hiçbir zaman sıfırın altına düşmez.

var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50

Alt çizgi bir vaattir, kilit değil: wallet._coins = -999 herhangi bir hata olmadan çalışır. Bu vaade uymak diğer betikleri yazanlara bağlıdır; bu nedenle alt çizgiyle başlayan üyeleri sınıflarının dışından okumayın veya değiştirmeyin.

Godot'un kendisinden iki alt çizgili adı zaten biliyorsun: _ready() ve _init(), kendi kodun tarafından değil, motor tarafından çağrılır.

challenge icon

Görev

Kolay

user.gd dosyasındaki User sınıfını tamamla. Parolasını özel bir özellik olan _password içinde tutar ve bu özelliğe yalnızca kendi kodu erişir.

  • Kurucu, başlangıç parolasını saklar
  • check_password(attempt), attempt değerinin parolayla eşleşip eşleşmediğini döndürür
  • Özel bir yardımcı işlev olan _is_strong(candidate), candidate değerinin en az 6 karakter içerip içermediğini döndürür
  • change_password(old_password, new_password), parolayı değiştirir ve yalnızca old_password doğruysa ve new_password yeterince güçlüyse true döndürür. Aksi takdirde hiçbir şeyi değiştirmez ve false döndürür

Verilen kod başlangıç parolasını, kaç komutun geleceğini ve check PASSWORD ile change OLD NEW komutlarını okur. Parola godot4 ve komutlar change godot4 abc, change wrong longenough ve check godot4 olduğunda şu çıktıyı verir:

Password not changed
Password not changed
Access granted

Kodunu user.gd dosyasına yaz. main.gd verilen 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 user := User.new(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(" ")
		if parts[0] == "check":
			print("Access granted" if user.check_password(parts[1]) else "Access denied")
		elif user.change_password(parts[1], parts[2]):
			print("Password changed")
		else:
			print("Password not changed")
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