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

الفئات مقابل الكائنات

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

يحتفظ الصنف وكائناته بأشياء مختلفة. ينتمي const في الصنف إلى الصنف نفسه: توجد قيمة واحدة، وتقرأها من خلال اسم الصنف دون إنشاء كائن.

# dog.gd
class_name Dog
extends RefCounted

const SPECIES = "Canis familiaris"
var dog_name: String = "Unnamed"
var breed: String = "Unknown"
print(Dog.SPECIES) # Canis familiaris

تصف أسطر var ما يحتفظ به كل كائن. يحصل كل كائن يُنشأ باستخدام new() على نسخة خاصة به من هذه المتغيرات، وتبدأ بقيمها الافتراضية:

var dog1 := Dog.new()
var dog2 := Dog.new()
dog1.dog_name = "Nicky"
dog1.breed = "Husky"
print(dog1.dog_name) # Nicky
print(dog2.dog_name) # Unnamed

تغيير dog1 يُبقي dog2 كما كان. ويمكن للكائن أيضًا قراءة الثابت: dog1.SPECIES له القيمة نفسها التي لـ Dog.SPECIES.

لا يحتوي الكائن إلا على المتغيرات التي يصرّح بها صنفه. يتسبب dog1.color = "brown" في إيقاف البرنامج مع ظهور خطأ، لأن Dog ليس لديه متغير color. يوضع كل متغير يحتاج إليه الكائن في الصنف.

challenge icon

التحدي

سهل

أكمل الصنف Student في student.gd:

    SCHOOL بقيمة "Godot High School"، مشترك بين الصنف بأكمله
  • متغير String باسم student_name
  • متغير String باسم grade يبدأ بالقيمة "N/A"

يقرأ الكود المُقدَّم عدد الطلاب الذين ستُدخَل بياناتهم، ثم سطرًا واحدًا لكل طالب: اسمًا، يتبعه اختياريًا مسافة وعلامة تقدير. ينشئ كائنًا من Student لكل سطر، ويضبط اسمه، ولا يضبط علامة التقدير إلا إذا احتوى السطر عليها. ثم يطبع Student.SCHOOL وكل طالب. بالنسبة إلى السطرين Alice A وBob، تكون المخرجات:

School: Godot High School
Alice has grade A
Bob has grade N/A

ضع الكود في student.gd. يحتوي main.gd على كود الإدخال/الإخراج المُقدَّم، ولا يمكن تعديله.

جرّب بنفسك

extends Node

func _ready():
	# كود الإدخال/الإخراج المقدَّم: اتركه كما هو
	var count := int(OS.read_string_from_stdin())
	var students: Array[Student] = []
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		var student := Student.new()
		student.student_name = parts[0]
		if parts.size() > 1:
			student.grade = parts[1]
		students.append(student)
	print("School: %s" % Student.SCHOOL)
	for student in students:
		print("%s has grade %s" % [student.student_name, student.grade])
quiz iconاختبر نفسك

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

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

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