Menu
CoddyTech
flag Ar iconالعربيةdown icon

متغيرات الكائن مقابل المتغيرات الساكنة

جزء من قسم البرمجة كائنية التوجّه في رحلة 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 += 1
var 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 للبيانات المشتركة التي تتغير أثناء تشغيل البرنامج، مثل عدّاد أو إعداد تتبعه جميع الكائنات.

challenge icon

التحدي

سهل

أكمل الصنف 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())
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس البرمجة كائنية التوجّه

تدرّب بنفسك: مترجم GDScript عبر الإنترنت