الخصائص
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 6 من 65.
المتغيرات التي تعرّفها الفئة هي الخصائص (وتُسمّى أيضًا متغيرات الأعضاء): البيانات التي يحملها كل كائن. عرّفها في أعلى الفئة، مع تحديد نوع وقيمة ابتدائية لكل متغير:
# player.gd
class_name Player
extends RefCounted
var player_name: String = "Hero"
var level: int = 1
var hp: float = 100.0
var inventory: Array[String] = []تبدأ الخاصية المُعلَنة دون قيمة بالقيمة الافتراضية لنوعها: 0 لـ int، و"" لـ String، وfalse لـ bool ومصفوفة فارغة لـ Array[String].
خارج الصنف، تقرأ الخاصية وتغيّرها باستخدام نقطة. داخل أساليب الصنف، تستخدم اسمها:
var p := Player.new()
p.level += 1
p.inventory.append("sword")
print(p.level) # 2
print(p.inventory) # ["sword"]يحصل كل كائن على نسخة خاصة به من كل خاصية، بما في ذلك المصفوفات: تنشئ [] مصفوفة فارغة جديدة لكل لاعب، لذا يظل مخزون اللاعب الآخر فارغًا.
يتم التحقق من النوع: يُبلّغ عن p.level = "max" بوصفه خطأً قبل تشغيل البرنامج، لأن level يحتوي على int.
التحدي
سهلأكمِل الصنف Player في player.gd. صرّح بالخصائص التالية:
player_name، وهوStringيبدأ بالقيمة"Hero"level، وهوintيبدأ بالقيمة1hp، وهوintيبدأ بالقيمة100inventory، وهوArray[String]يبدأ فارغًا
ثم أكمِل الدالة describe(). تعيد NAME (level LEVEL, HP hp): ITEMS، حيث تكون ITEMS هي عناصر المخزون مفصولة بـ ", "، أو no items عندما يكون المخزون فارغًا.
تقرأ الشيفرة المقدمة اسم لاعب واحد، ثم عدد الأوامر التالية، ثم الأوامر: hit AMOUNT أو item NAME أو level. وتغيّر خصائص اللاعب مباشرةً، ثم تطبع أخيرًا describe() لذلك اللاعب ولاعب ثانٍ لم تغيّره مطلقًا. عند إدخال Ada والأوامر hit 30 وitem sword وlevel وitem shield، تطبع:
Ada (level 2, 70 hp): sword, shield
Hero (level 1, 100 hp): no itemsضع شيفرتك في player.gd. يحتوي main.gd على شيفرة الإدخال/الإخراج المقدمة، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# شيفرة الإدخال/الإخراج المقدَّمة: أبقِها كما هي
var hero := Player.new()
hero.player_name = OS.read_string_from_stdin()
var guest := Player.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
match parts[0]:
"hit":
hero.hp -= int(parts[1])
"item":
hero.inventory.append(parts[1])
"level":
hero.level += 1
print(hero.describe())
print(guest.describe())
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت