Privato per convenzione
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 13 di 65.
GDScript non ha una parola chiave private: è possibile accedere a ogni proprietà e metodo di un oggetto da altri script. La convenzione di Godot prevede un trattino basso iniziale. _coins e _is_valid() qui sotto sono destinati solo al codice della classe stessa:
# 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 > 0Altri script usano i metodi pubblici, che controllano ogni modifica: spend() rifiuta di sottrarre più monete di quante ne contenga il portafoglio, così il numero di monete non scende mai sotto zero.
var wallet := Wallet.new()
wallet.add(50)
wallet.add(-20)
print(wallet.spend(80)) # false
print(wallet.get_coins()) # 50Il trattino basso è una promessa, non un blocco: wallet._coins = -999 viene eseguito senza errori. Mantenere la promessa spetta a chi scrive gli altri script, quindi non leggere né modificare i membri con il trattino basso dall'esterno della loro classe.
Conosci già due nomi con il trattino basso di Godot: _ready() e _init() vengono chiamati dal motore, non dal tuo codice.
Sfida
FacileCompleta la classe User in user.gd. Conserva la password in una proprietà privata, _password, a cui accede solo il suo codice.
- Il costruttore memorizza la password iniziale
check_password(attempt)restituisce seattemptcorrisponde alla password_is_strong(candidate), un helper privato, restituisce secandidateha almeno6caratterichange_password(old_password, new_password)cambia la password e restituiscetruesolo quandoold_passwordè corretta enew_passwordè robusta. Altrimenti non cambia nulla e restituiscefalse
Il codice fornito legge la password iniziale, il numero di comandi successivi e i comandi check PASSWORD e change OLD NEW. Per la password godot4 e i comandi change godot4 abc, change wrong longenough e check godot4 stampa:
Password not changed
Password not changed
Access grantedIl tuo codice va in user.gd. main.gd contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Supplied input/output code: keep it as it is
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")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online