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

المُنشئ (_init)

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

يتطلب تعيين كل خاصية بعد new() عدة أسطر، ومن السهل نسيان إحداها. يهيّئ المُنشئ الكائن عند إنشائه. في GDScript، المُنشئ هو الأسلوب _init():

# book.gd
class_name Book
extends RefCounted

var title: String
var author: String
var pages: int

func _init(book_title: String, book_author: String, page_count: int) -> void:
	title = book_title
	author = book_author
	pages = page_count

تُمرَّر الوسائط التي تقدّمها إلى new() إلى _init()، والتي تعمل تلقائيًا قبل أن تُعيد new() الكائن:

var dune := Book.new("Dune", "Frank Herbert", 412)
print(dune.title) # Dune
print(dune.pages) # 412

عندما تكون لـ _init() معاملات، يجب أن تمررها new(): استدعاء Book.new() دون وسيطات يُعد خطأً يُبلّغ عنه قبل تشغيل البرنامج. المعامل ذو القيمة الافتراضية اختياري:

func _init(book_title: String, book_author: String = "Unknown") -> void:

باستخدام هذا المُنشئ، تنشئ Book.new("Notes") كتابًا يكون مؤلفه "Unknown".

تختلف أسماء المعلمات أعلاه عن أسماء الخصائص. لو كانت متطابقة، لكتبتَ self.title = title، كما في درس self.

challenge icon

التحدي

سهل

أكمل الصنف Book في book.gd:

  • يخزّن المُنشئ _init(book_title, book_author, page_count) وسيطاته في الخصائص title وauthor وpages
  • تعيد describe() القيمة 'TITLE' by AUTHOR, PAGES pages، مع وضع العنوان بين علامتي اقتباس مفردتين

يقرأ الكود المزوّد عدد الكتب التالية، ثم يقرأ سطرًا لكل كتاب يحتوي على العنوان والمؤلف وعدد الصفحات، مفصولة بعلامة ;. ينشئ كل كتاب باستخدام Book.new()، ويطبع describe()، ثم يطبع إجمالي قيم الخصائص pages. بالنسبة إلى السطر Dune;Frank Herbert;412، يطبع:

'Dune' by Frank Herbert, 412 pages
Total pages: 412

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

جرّب بنفسك

extends Node

func _ready():
	# كود الإدخال/الإخراج المُقدَّم: اتركه كما هو
	var count := int(OS.read_string_from_stdin())
	var total := 0
	for i in count:
		var parts := OS.read_string_from_stdin().split(";")
		var book := Book.new(parts[0], parts[1], int(parts[2]))
		print(book.describe())
		total += book.pages
	print("Total pages: %d" % total)
quiz iconاختبر نفسك

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

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

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