متغيرات الكائن مقابل المتغيرات الساكنة
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 9 من 65.
إن var العادي في الصنف هو متغير مثيل: لكل كائن متغيره الخاص. أما static var فينتمي إلى الصنف بدلًا من ذلك: توجد قيمة واحدة مشتركة بين جميع الكائنات.
# student.gd
class_name Student
extends RefCounted
static var school: String = "Godot High"
static var count: int = 0
var student_name: String
func _init(new_name: String) -> void:
student_name = new_name
count += 1var ada := Student.new("Ada")
var bo := Student.new("Bo")
print(Student.count) # 2
print(ada.student_name, " and ", bo.student_name) # Ada and Bo
Student.school = "Godot Academy"
print(ada.school) # Godot Academy
print(bo.school) # Godot Academyاقرأ متغيرًا ثابتًا من خلال اسم الفئة، كما في Student.count، دون الحاجة إلى كائن. داخل الفئة، استخدم اسمها: count += 1 في _init() يحسب عدد الطلاب الذين أُنشئوا حتى الآن.
يؤدي تغيير Student.school إلى تغييره لجميع الطلاب دفعة واحدة. وسيؤدي ada.school = "Night School" إلى النتيجة نفسها، لأنه لا يوجد سوى school واحد؛ واستخدام اسم الفئة يجعل ذلك واضحًا.
تتم مشاركة const بالطريقة نفسها، لكن لا يمكن أن تتغير أبدًا. استخدم static var للبيانات المشتركة التي تتغير أثناء تشغيل البرنامج، مثل عدّاد أو إعداد تتبعه جميع الكائنات.
التحدي
سهلأكمل الصنف BankAccount في bank_account.gd:
- متغير
intساكنinterest_percentيبدأ بالقيمة2، ويكون مشتركًا بين جميع الحسابات - متغير
intساكنaccount_countيبدأ بالقيمة0؛ ويضيف المُنشئ1إليه مع كل حساب جديد - تعيد
describe()القيمةHOLDER: $BALANCE at PERCENT%، باستخدامholderوbalanceالخاصين بالحساب وinterest_percentالمشترك
يقرأ الكود المُقدَّم عدد الحسابات التالية، ثم سطرًا واحدًا لكل حساب بصيغة holder balance، ثم سعر فائدة جديدًا. يطبع BankAccount.account_count وكل حساب، ويضبط BankAccount.interest_percent على السعر الجديد، ثم يطبع كل حساب مرة أخرى. عند إدخال Alice 1000 وBob 2000 وسعر الفائدة 3، تكون المخرجات:
Accounts opened: 2
Alice: $1000 at 2%
Bob: $2000 at 2%
After the rate change:
Alice: $1000 at 3%
Bob: $2000 at 3%ضع الكود في bank_account.gd. يحتوي main.gd على كود الإدخال/الإخراج المُقدَّم، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# كود الإدخال/الإخراج المقدَّم: اتركه كما هو
var accounts: Array[BankAccount] = []
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
accounts.append(BankAccount.new(parts[0], int(parts[1])))
print("Accounts opened: %d" % BankAccount.account_count)
for account in accounts:
print(account.describe())
BankAccount.interest_percent = int(OS.read_string_from_stdin())
print("After the rate change:")
for account in accounts:
print(account.describe())
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت