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

الكلمة المفتاحية super

جزء من قسم البرمجة كائنية التوجّه في رحلة GDScript على Coddy. الدرس 16 من 65.

عندما يحتاج الطفل إلى بيانات إضافية، يكتب دالة _init() الخاصة به. عندها لا يعود مُنشئ الصنف الأب يُنفَّذ تلقائيًا. استدعِه باستخدام super()، مع تمرير الوسيطات التي يتوقعها الصنف الأب:

# animal.gd
class_name Animal
extends RefCounted

var animal_name: String

func _init(n: String) -> void:
	animal_name = n
	print("Animal created: ", n)
# dog.gd
class_name Dog
extends Animal

var breed: String

func _init(n: String, b: String) -> void:
	super(n)
	breed = b
	print("Dog breed set: ", b)
var buddy := Dog.new("Buddy", "Beagle")
print(buddy.animal_name, " the ", buddy.breed)
Animal created: Buddy
Dog breed set: Beagle
Buddy the Beagle

من دون سطر super(n)، يظل البرنامج يعمل، لكن يتم تخطي مُنشئ Animal: لا شيء يعيّن animal_name، لذا تظل سلسلة نصية فارغة. ضع super() أولًا، لكي تكون متغيرات الأصل جاهزة قبل أن يستخدمها الابن.

في أي طريقة أخرى، تُشغّل super() إصدار الأب من الطريقة التي أنت فيها. يحتفظ الابن بنتيجة الأب ويضيف إليها:

# animal.gd
func describe() -> String:
	return "I am " + animal_name
# dog.gd
func describe() -> String:
	return super() + ", a " + breed
var rex := Dog.new("Rex", "Husky")
print(rex.describe())
Animal created: Rex
Dog breed set: Husky
I am Rex, a Husky

لاستدعاء طريقة مختلفة من الصنف الأب، اكتب اسمها بعد نقطة: تعمل super.describe() من أي طريقة في Dog.

challenge icon

التحدي

سهل

اكتب صنفًا Person وصنفًا Employee يرث منه.

  • يخزّن Person كلاً من person_name وage في المُنشئ. تُعيد introduce() القيمة Hi, I'm NAME and I'm AGE years old.
  • يضيف Employee الخاصية job. يمرّر مُنشئه الاسم والعمر إلى super() ويخزّن الوظيفة. تُعيد introduce() فيه نتيجة introduce() للصنف الأب، متبوعةً بـ . I work as a JOB.

يقرأ الكود المزوّد عدد الأشخاص الذين سيتبعون، ثم سطرًا لكل شخص: person NAME AGE أو employee NAME AGE JOB. ويطبع introduce() لكل منهم. بالنسبة إلى person Alice 30 وemployee Bob 35 Developer، تكون المخرجات:

Hi, I'm Alice and I'm 30 years old
Hi, I'm Bob and I'm 35 years old. I work as a Developer

ضع الكود في person.gd وemployee.gd. يحتوي main.gd على كود الإدخال/الإخراج المزوّد، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# كود الإدخال/الإخراج الموفَّر: اتركه كما هو
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ")
		if parts[0] == "employee":
			var employee := Employee.new(parts[1], int(parts[2]), parts[3])
			print(employee.introduce())
		else:
			var person := Person.new(parts[1], int(parts[2]))
			print(person.introduce())
quiz iconاختبر نفسك

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

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

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