التعدادات في الأصناف
جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 44 من 65.
يمكن التصريح بتعداد داخل فئة، بجانب متغيراتها. عندئذٍ تنتمي الخيارات إلى تلك الفئة:
# weapon.gd
class_name Weapon
extends RefCounted
enum Kind { SWORD, BOW, STAFF }
var kind: Kind
func _init(weapon_kind: Kind) -> void:
kind = weapon_kind
func is_ranged() -> bool:
return kind == Kind.BOW or kind == Kind.STAFFداخل weapon.gd، التعداد هو Kind. تكتب كل الملفات الأخرى اسم الصنف أولًا، Weapon.Kind.BOW، في القيم وتعليقات الأنواع وأنماط match:
# blacksmith.gd
class_name Blacksmith
extends RefCounted
static func repair_cost(kind: Weapon.Kind) -> int:
match kind:
Weapon.Kind.SWORD:
return 20
Weapon.Kind.BOW:
return 15
return 30تظل الخيارات أرقامًا: تطبع Weapon.new(Weapon.Kind.BOW).kind القيمة 1. يعمل التعداد نفسه مثل قاموس يربط الأسماء بالأرقام:
print(Weapon.Kind.keys()) # ["SWORD", "BOW", "STAFF"]
print(Weapon.Kind.find_key(1)) # BOW
print(Weapon.Kind["STAFF"]) # 2
print(Weapon.Kind.size()) # 3
for kind in Weapon.Kind.values():
print(Weapon.Kind.find_key(kind), ": ", Blacksmith.repair_cost(kind))تطبع الحلقة SWORD: 20 وBOW: 15 وSTAFF: 30. لا يتحقق GDScript من أن الرقم أحد الخيارات: ينشئ Weapon.new(7) سلاحًا تكون قيمة kind فيه 7. مرّر الخيارات المُسمّاة وسيظل الكود صحيحًا.
يجب أن يكون التعداد الذي يصف فئةً ما داخل تلك الفئة، حتى يرى القارئ مصدر Kind في Weapon.Kind.BOW.
التحدي
سهلرتّب الجرعات باستخدام تعداد يعيش داخل الفئة Potion.
- في
potion.gd، صرّح عنenum Kind { HEAL, MANA, POISON }واجعل نوعkindهوKind. Potion.from_text(text, strength)دالة ثابتة تحوّل"MANA"إلىKind.MANAوتعيد جرعة جديدة.- تعيد
describe()القيمةHEAL potion: +20 HPأوMANA potion: +15 MPأوPOISON potion: -5 HP، باستخدام اسم النوع وقوته. - في
belt.gd، تعيدsummary()سطرًا واحدًا لكل نوع، وفق ترتيب التعداد:HEAL: 2 (35 total)، مع عدد الجرعات من ذلك النوع ومجموع قوتها بين قوسين. تظهر الأنواع التي لا تحتوي على جرعات في سطر أيضًا.
يقرأ الكود المرفق عدد الجرعات التالية (HEAL 20)، ويضيف كل جرعة إلى الحزام، ويطبع وصفها ثم الملخص. بالنسبة إلى HEAL 20 وPOISON 5 وHEAL 15، يطبع:
Added HEAL potion: +20 HP
Added POISON potion: -5 HP
Added HEAL potion: +15 HP
HEAL: 2 (35 total)
MANA: 0 (0 total)
POISON: 1 (5 total)ضع الكود الخاص بك في potion.gd وbelt.gd. يحتوي main.gd على كود الإدخال/الإخراج المرفق، ولا يمكن تعديله.
جرّب بنفسك
extends Node
func _ready():
# كود الإدخال والإخراج المقدَّم: أبقه كما هو
var belt := Belt.new()
var count := int(OS.read_string_from_stdin())
for i in count:
var parts := OS.read_string_from_stdin().split(" ")
var potion := Potion.from_text(parts[0], int(parts[1]))
belt.add(potion)
print("Added ", potion.describe())
for line in belt.summary():
print(line)
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجّه
1أساسيات البرمجة كائنية التوجه
الملفات الخارجيةمقدمة إلى البرمجة كائنية التوجهالفئات مقابل الكائناتالكلمة المفتاحية selfالأساليبالخصائصالمُنشئ (_init)مراجعة - آلة حاسبة بسيطة4تعدد الأشكال
إعادة النظر في تجاوز الأساليبكتابة الأنواع بأسلوب البطةالفئات والأساليب المجرّدةتصميم الواجهاتمراجعة - حاسبة الأشكال10أنماط التصميم، الجزء الثاني
نمط الأوامرنمط المحوّلنمط المُزيّننمط الطريقة القالبيةنمط الحالةالنمط المركّب2خصائص الأصناف
متغيرات الكائن مقابل المتغيرات الساكنةالدوال الساكنةمُعيِّنات الخصائصمُسترجِعات الخصائصخاص وفقًا للاتفاقيةمراجعة - مدير الحسابات البنكية5التغليف
الأعضاء العامة والخاصةالتحقق من الصحة باستخدام دوال الضبطإخفاء المعلوماتالخصائص للقراءة فقطمراجعة - نظام سجلات الطلاب8مفاهيم متقدمة في البرمجة كائنية التوجه
التركيب مقابل الوراثةالأصناف الداخليةالعُقد كمكوّناتRefCounted مقابل Nodeالتعدادات في الأصنافتدرّب بنفسك: مترجم GDScript عبر الإنترنت