Privat berdasarkan konvensi
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GDScript di Coddy. Pelajaran 13 dari 65.
GDScript tidak memiliki kata kunci private: setiap property dan method dari sebuah object dapat diakses dari script lain. Konvensi Godot adalah menggunakan garis bawah di awal. _coins dan _is_valid() di bawah ini hanya ditujukan untuk kode class itu sendiri:
# 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 > 0Skrip lain menggunakan method publik, dan method tersebut memeriksa setiap perubahan: spend() menolak mengambil koin lebih banyak daripada yang dimiliki dompet, sehingga jumlah koin tidak pernah kurang dari nol.
var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50Garis bawah adalah janji, bukan pengunci: wallet._coins = -999 berjalan tanpa error. Menepati janji itu bergantung pada siapa pun yang menulis skrip lain, jadi jangan membaca atau mengubah anggota bergaris bawah dari luar class-nya.
Kamu sudah mengenal dua nama dengan garis bawah dari Godot: _ready() dan _init() dipanggil oleh engine, bukan oleh kodemu sendiri.
Tantangan
MudahLengkapi class User di user.gd. Class ini menyimpan password-nya di property privat, _password, dan hanya kodenya sendiri yang mengaksesnya.
- Constructor menyimpan password awal
check_password(attempt)mengembalikan apakahattemptcocok dengan password_is_strong(candidate), helper privat, mengembalikan apakahcandidatememiliki setidaknya6karakterchange_password(old_password, new_password)mengubah password dan hanya mengembalikantruejikaold_passwordbenar dannew_passwordkuat. Jika tidak, fungsi ini tidak mengubah apa pun dan mengembalikanfalse
Kode yang disediakan membaca password awal, jumlah perintah berikutnya, dan perintah check PASSWORD serta change OLD NEW. Untuk password godot4 dan perintah change godot4 abc, change wrong longenough, dan check godot4, kode akan mencetak:
Password not changed
Password not changed
Access grantedTulis kodemu di user.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 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")
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengantar OOPclass dan objectKata Kunci selfmethodpropertyKonstruktor (_init)Ringkasan: Kalkulator Sederhana4Polimorfisme
Method Overriding Sekali LagiDuck TypingKelas Abstrak dan MethodDesain InterfaceRingkasan: Kalkulator Bentuk7Sinyal
Apa itu Sinyal?Mendeklarasikan dan MemancarkanMenghubungkan ke SinyalSinyal dengan ArgumenRangkuman, Sistem Kesehatan10Pola Desain Bagian 2
Pola CommandPola AdapterPola DecoratorPola Template MethodPola StatePola Composite2Property class
Variabel instance vs. variabel statisFungsi statisSetter propertyGetter propertyPrivat berdasarkan konvensiRangkuman: Pengelola Rekening Bank5Enkapsulasi
Member Publik dan PrivatValidasi dengan SetterPenyembunyian InformasiProperty Hanya-BacaRingkasan: Sistem Catatan Siswa8Konsep OOP Lanjutan
Komposisi vs PewarisanInner ClassNode sebagai KomponenRefCounted vs NodeEnum dalam Class11Proyek: Manajemen Perpustakaan
Gambaran Umum Proyekclass Buku dan PenggunaLatihan sendiri: Compiler GDScript online