مُعيِّنات الخصائص
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 11 من 65.
يمكن لخاصية أن تُشغّل تعليمات برمجية في كل مرة تُسنَد إليها قيمة. ضع نقطتين بعد التصريح وأضف كتلة set(value): ذات مسافة بادئة، وهي المُعيِّن الخاص بها:
# player.gd
var health: int = 100:
set(value):
health = clampi(value, 0, 100)القيمة value هي ما يجري إسناده. داخل المعيّن، يؤدي إسناد health إلى تخزين القيمة في الخاصية؛ ولا يؤدي إلى تشغيل المعيّن مرة أخرى. يُبقي هذا المعيّن health بين 0 و100، مهما كانت القيمة التي يسندها باقي البرنامج:
var p := Player.new()
p.health -= 30
print(p.health) # 70
p.health = 250
print(p.health) # 100
p.health -= 500
print(p.health) # 0يُنفَّذ المُعيِّن عند كل إسناد، حتى داخل الصنف أيضًا: يمرّ كلٌّ من health -= 10 في إحدى دوال Player وhealth = start_health في _init() عبره. القيمة الابتدائية الوحيدة التي تُخزَّن دون استدعائه هي القيمة التي تأتي بعد = في التصريح.
يمكن للدالة المُعيِّنة أيضًا رفض قيمة. إذا لم تُسنِد قيمة إلى الخاصية، فستبقى القيمة القديمة:
var level: int = 1:
set(value):
if value > level:
level = valueاحذف نوع value: set(value: int): خطأ. نوع الخاصية نفسه يحدد ما تخزّنه.
التحدي
سهلأضف إلى الخاصية health في الصنف Player ضمن player.gd أداة ضبط بحيث:
- تحافظ على قيمة الصحة المخزنة بين
0وmax_health: تُخزَّن القيمة الأكبر على أنهاmax_health، والقيمة السالبة على أنها0 - تطبع
Player is down!عندما تكون الصحة الجديدة0وكانت الصحة القديمة أكبر من0
يقرأ الكود المزوَّد عدد الأوامر التالية، ثم يقرأ أمرًا واحدًا في كل سطر: damage N (player.health -= N) أو heal N (player.health += N) أو set N (player.health = N). بعد كل أمر، يطبع قيمة الصحة. عند تنفيذ damage 30 وheal 50 وdamage 120 وheal 10، يطبع:
Health: 70
Health: 100
Player is down!
Health: 0
Health: 10اكتب كودك في player.gd. يحتوي main.gd على كود الإدخال/الإخراج المزوَّد، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# شيفرة الإدخال/الإخراج المقدَّمة: اتركها كما هي
var player := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var amount := int(parts[1])
if parts[0] == "damage":
player.health -= amount
elif parts[0] == "heal":
player.health += amount
elif parts[0] == "set":
player.health = amount
print("Health: %d" % player.health)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت